创建一个悬浮窗,方便调试改动的代码
// 悬浮窗
Button button = new Button(this);
button.setText("Hello world");
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mRefreshMessageListener.refreshListener();
}
});
WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
// params.type = WindowManager.LayoutParams.FIRST_SYSTEM_WINDOW
// 靠手机屏幕的左边居中显示
params.gravity = Gravity.CENTER | Gravity.LEFT;
// params.type = WindowManager.LayoutParams.TYPE_APPLICATION+2037;
params.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
params.format = PixelFormat.RGBA_8888;
// 如果设置以下属性,那么该悬浮窗口将不可触摸,不接受输入事件,不影响其他窗口事件的传递和分发
// params.flags=LayoutParams.FLAG_NOT_TOUCH_MODAL
// |LayoutParams.FLAG_NOT_FOCUSABLE | LayoutParams.FLAG_NOT_TOUCHABLE;
// 可以设定坐标
// params.x=xxxx
params.y = -200;
params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
// 透明度
// params.alpha=0.8f;
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
windowManager.addView(button, params);
// 移动悬浮窗
button.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int x = (int) event.getRawX();
int y = (int) event.getRawY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mLastX = x;
mLastY = y;
break;
case MotionEvent.ACTION_MOVE:
int deltaX = x - mLastX;
int deltaY = y - mLastY;
params.x = params.x + deltaX;
params.y = params.y + deltaY;
windowManager.updateViewLayout(v, params);
mLastX = x;
mLastY = y;
break;
default:
break;
}
return false;
}
});