FloatServiceView写法
时间: 2024-04-22 17:24:48 浏览: 10
以下是一个简单的 FloatServiceView 的示例代码,供参考:
```java
public class FloatServiceView extends View {
private WindowManager windowManager;
private WindowManager.LayoutParams layoutParams;
public FloatServiceView(Context context) {
super(context);
windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
// 初始化悬浮窗口的参数
layoutParams = new WindowManager.LayoutParams();
layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; // 悬浮窗口类型,需要权限
layoutParams.format = PixelFormat.TRANSLUCENT; // 设置窗口背景透明
layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; // 窗口不可获取焦点
layoutParams.width = WindowManager.LayoutParams.WRAP_CONTENT; // 悬浮窗口的宽度
layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; // 悬浮窗口的高度
layoutParams.gravity = Gravity.START | Gravity.TOP; // 悬浮窗口的位置
// 设置悬浮窗口的点击和移动事件
setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 处理点击事件
}
});
setOnTouchListener(new OnTouchListener() {
private int initialX;
private int initialY;
private float initialTouchX;
private float initialTouchY;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
initialX = layoutParams.x;
initialY = layoutParams.y;
initialTouchX = event.getRawX();
initialTouchY = event.getRawY();
return true;
case MotionEvent.ACTION_MOVE:
int xDiff = (int) (event.getRawX() - initialTouchX);
int yDiff = (int) (event.getRawY() - initialTouchY);
layoutParams.x = initialX + xDiff;
layoutParams.y = initialY + yDiff;
windowManager.updateViewLayout(FloatServiceView.this, layoutParams);
return true;
}
return false;
}
});
}
@Override
protected void onDraw(Canvas canvas) {
// 在悬浮窗口上绘制内容
// ...
}
public void show() {
// 将悬浮窗口添加到 WindowManager 中
windowManager.addView(this, layoutParams);
}
public void hide() {
// 从 WindowManager 中移除悬浮窗口
windowManager.removeView(this);
}
}
```
以上代码是一个简单的悬浮窗口视图类的实现,其中包括了初始化悬浮窗口参数、设置点击和移动事件、绘制内容等功能。通过调用 `show()` 方法可以将悬浮窗口显示在屏幕上,调用 `hide()` 方法可以隐藏悬浮窗口。需要注意的是,使用悬浮窗口功能需要在 AndroidManifest.xml 文件中添加相应的权限声明。