как добавить кнопку закрытия, когда я перемещаю плавающий пузырь в android - PullRequest
1 голос
/ 27 февраля 2020

У меня есть плавающий пузырь, как в мессенджере 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, но она не работает

Спасибо за помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...