Java 如何在android中移动浮动气泡时添加关闭按钮

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

我有一个像Facebook messenger一样的浮动泡泡,我需要关闭按钮,只有当泡泡移动时才会出现。实际代码始终显示关闭按钮

BubbleHadService:

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中,但它不起作用

谢谢你的帮助