Java 如何在android中移动浮动气泡时添加关闭按钮
我有一个像Facebook messenger一样的浮动泡泡,我需要关闭按钮,只有当泡泡移动时才会出现。实际代码始终显示关闭按钮 BubbleHadService:Java 如何在android中移动浮动气泡时添加关闭按钮,java,android,android-studio,Java,Android,Android Studio,我有一个像Facebook messenger一样的浮动泡泡,我需要关闭按钮,只有当泡泡移动时才会出现。实际代码始终显示关闭按钮 BubbleHadService: mChatHeadView = LayoutInflater.from(this).inflate(R.layout.bubble, null); mChatCloseView = LayoutInflater.from(this).inflate(R.layout.close, null); fi
mChatHeadView = LayoutInflater.from(this).inflate(R.layout.bubble, null);
mChatCloseView = LayoutInflater.from(this).inflate(R.layout.close, null);
final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
LAYOUT_FLAG,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT
);
final WindowManager.LayoutParams params2 = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
LAYOUT_FLAG,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT
);
params.gravity = Gravity.TOP | Gravity.LEFT;
params.x = 0;
params.y = 100;
params2.gravity = Gravity.TOP | Gravity.LEFT;
params2.x = 500;
params2.y = 1800;
mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
mWindowManager.addView(mChatHeadView, params);
mWindowManager.addView(mChatCloseView, params2);
final ImageView chatHeadImage = (ImageView) mChatHeadView.findViewById(R.id.chat_head_profile_iv);
chatHeadImage.setOnTouchListener(new View.OnTouchListener() {
private int lastAction;
private int initialX;
private int initialY;
private float initialTouchX;
private float initialTouchY;
private static final int MAX_CLICK_DURATION = 200;
private long startClickTime;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
startClickTime = Calendar.getInstance().getTimeInMillis();
initialX = params.x;
initialY = params.y;
initialTouchX = event.getRawX();
initialTouchY = event.getRawY();
lastAction = event.getAction();
return true;
case MotionEvent.ACTION_UP:
long clickDuration = Calendar.getInstance().getTimeInMillis() - startClickTime;
if (clickDuration < MAX_CLICK_DURATION) {
Intent intent = new Intent(BubbleHeadService.this, BubbleActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
stopSelf();
mWindowManager.removeView(mChatCloseView);
}
lastAction = event.getAction();
return true;
case MotionEvent.ACTION_MOVE:
params.x = initialX + (int) (event.getRawX() - initialTouchX);
params.y = initialY + (int) (event.getRawY() - initialTouchY);
if (params.x <=500 && params.x >= 300 && params.y <=1800 && params.y >= 1600){
//When the bubble touch the close button
stopSelf();
mWindowManager.removeView(mChatCloseView);
}
mWindowManager.updateViewLayout(mChatHeadView, params);
lastAction = event.getAction();
return true;
}
return false;
}
});
}
mChatHeadView=LayoutFlater.from(this).充气(R.layout.bubble,null);
mChatCloseView=LayoutInflater.from(this).充气(R.layout.close,null);
final WindowManager.LayoutParams params=新建WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_内容,
WindowManager.LayoutParams.WRAP_内容,
布图(u)旗,,
WindowManager.LayoutParams.FLAG\u不可聚焦,
像素格式。半透明
);
最终WindowManager.LayoutParams参数2=新的WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_内容,
WindowManager.LayoutParams.WRAP_内容,
布图(u)旗,,
WindowManager.LayoutParams.FLAG\u不可聚焦,
像素格式。半透明
);
params.gravity=gravity.TOP | gravity.LEFT;
参数x=0;
参数y=100;
params2.gravity=gravity.TOP | gravity.LEFT;
参数2.x=500;
参数2.y=1800;
mWindowManager=(窗口管理器)getSystemService(窗口服务);
mWindowManager.addView(mChatHeadView,参数);
mWindowManager.addView(mChatCloseView,params2);
最终图像视图chatHeadImage=(图像视图)mChatHeadView.findViewById(R.id.chat\u head\u profile\u iv);
chatHeadImage.setOnTouchListener(新视图.OnTouchListener(){
私人行动;
私有int initialX;
私有int初始值;
私有浮点数;
私家侦探敏感;
私有静态最终整数最大点击持续时间=200;
私人长启动时间;
@凌驾
公共布尔onTouch(视图v,运动事件){
开关(event.getAction()){
case MotionEvent.ACTION\u DOWN:
startClickTime=Calendar.getInstance().getTimeInMillis();
initialX=参数x;
初始值y=参数y;
initialTouchX=event.getRawX();
initialTouchY=event.getRawY();
lastAction=event.getAction();
返回true;
case MotionEvent.ACTION\u UP:
long clickDuration=Calendar.getInstance().getTimeInMillis()-startClickTime;
如果(点击持续时间<最大点击持续时间){
Intent Intent=newintent(bubblehadservice.this、BubbleActivity.class);
intent.addFlags(intent.FLAG\u活动\u新任务);
星触觉(意向);
stopSelf();
mWindows Manager.removeView(mChatCloseView);
}
lastAction=event.getAction();
返回true;
case MotionEvent.ACTION\u移动:
params.x=initialX+(int)(event.getRawX()-initialTouchX);
params.y=initialY+(int)(event.getRawY()-initialTouchY);
如果(参数x=300和参数y=1600){
//当气泡触摸关闭按钮时
stopSelf();
mWindows Manager.removeView(mChatCloseView);
}
mWindowManager.updateViewLayout(mChatHeadView,参数);
lastAction=event.getAction();
返回true;
}
返回false;
}
});
}
在这段代码中,关闭按钮总是显示,我试图将mWindowManager.addView放在ACTION_MOVE中,但它不起作用
谢谢你的帮助