Android实现悬浮可拖拽的Button
发布时间:2023-05-18 13:10:38
随着移动设备的普及,用户对于移动应用的界面交互体验越来越高。而悬浮窗体作为一种非常常见的交互模式,对于用户的方便性以及效率提升有着不可替代的作用。本文将介绍如何使用Android实现悬浮可拖拽的Button。
一、实现悬浮窗口
1.在AndroidManifest.xml中声明权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
2.在代码中调用WindowManager.addView()方法创建悬浮窗口
//1.获取WindowManager对象
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
//2.设置悬浮窗口的参数
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
params.type = WindowManager.LayoutParams.TYPE_PHONE;//设置悬浮窗口的类型
params.format = PixelFormat.RGBA_8888;
params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
params.gravity = Gravity.TOP | Gravity.LEFT;//设置悬浮窗口的位置
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
//3.创建悬浮窗口
Button btnFloating = new Button(this);
btnFloating.setText("悬浮按钮");//设置悬浮按钮文字
btnFloating.setBackgroundColor(Color.YELLOW);//设置悬浮按钮的背景颜色
windowManager.addView(btnFloating, params);
二、实现悬浮可拖拽
1.在悬浮按钮控件中增加触摸事件的监控
btnFloating.setOnTouchListener(new View.OnTouchListener() {
private int lastX, lastY;
private int paramX, paramY;
@Override
public boolean onTouch(View v, MotionEvent event) {
int eventAction = event.getAction();
switch (eventAction) {
case MotionEvent.ACTION_DOWN:
//获取手指在屏幕上的坐标
lastX = (int) event.getRawX();
lastY = (int) event.getRawY();
paramX = params.x;
paramY = params.y;
break;
case MotionEvent.ACTION_MOVE:
//计算手指在屏幕上移动的距离
int dx = (int) event.getRawX() - lastX;
int dy = (int) event.getRawY() - lastY;
params.x = paramX + dx;
params.y = paramY + dy;
//更新悬浮窗口的显示位置
windowManager.updateViewLayout(btnFloating, params);
break;
case MotionEvent.ACTION_UP:
break;
default:
break;
}
return false;
}
});
2.在WindowManager.LayoutParams中添加FLAG_WATCH_OUTSIDE_TOUCH标志
params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;
这样设置之后,在悬浮窗口外侧的事件就会传递到底层的界面,而悬浮窗口本身不会接收到事件,从而可以实现悬浮可拖拽的效果。
以上就是Android实现悬浮可拖拽的Button的所有步骤,希望对大家有所帮助。
