У меня есть плавающий пузырь, как в мессенджере Facebook, мне нужно, чтобы кнопка закрытия появлялась только при движении пузыря. Фактический код всегда показывает кнопку закрытия
BubbleHeadService:
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;
}
});
}
В этом коде кнопка закрытия всегда отображается, я пытался поместить mWindowManager.addView внутри ACTION_MOVE, но она не работает
Спасибо за помощь