簡體   English   中英

Android:在按鈕外檢測ACTION_UP事件

[英]Android: Detect ACTION_UP event outside button

我在構建自定義按鈕時遇到了一些問題。 它由一個盒子和下面的一條小線組成。

當您按下按鈕時,該按鈕會垂直向下動畫,當您釋放按鈕時按鈕會再次向上動畫。 這在CustomButton.class中處理:

super.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
                    buttonContent.startAnimation(rectMoveDown);
                    colorDown.start();
                    return false;
                }
                if (event.getActionMasked() == MotionEvent.ACTION_UP) {
                    buttonContent.startAnimation(rectMoveUp);
                    colorUp.start();
                    return false;
                }
                return false;
            }
        });

然后在應用程序的其余部分中,我使用此按鈕並為其設置clicklistener。 因此我返回false(我認為這至少是正確的)因為我不想使用該事件,而是將其傳遞給層次結構中的clicklistener。

但是,當我第一次按下按鈕,將手指移到按鈕外面然后釋放屏幕時,問題就出現了。 然后該按鈕不顯示在ACTION_UP偵聽器中完成的動畫。

有沒有人知道如何解決這個問題?

經過一些更多測試后我發現了如何解決它!

在文檔中閱讀了更多內容后,我發現MotionEvent.ACTION_CANCEL正是我所需要的:

當前手勢已中止。 你不會再收到任何積分。 您應將此視為一個up事件,但不執行您通常會執行的任何操作。

所以現在我的TouchListener看起來像這樣(並且它的工作原理應該如此):

super.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getActionMasked()) {
                    case MotionEvent.ACTION_DOWN:
                        buttonContent.startAnimation(rectMoveDown);
                        colorDown.start();
                        return false;
                    case MotionEvent.ACTION_UP:
                    case MotionEvent.ACTION_CANCEL:
                        buttonContent.startAnimation(rectMoveUp);
                        colorUp.start();
                        return false;
                }
                return false;
            }
        });

並不是我開始使用解決它的switch-case,但我改為使用以使代碼看起來更好。 如您所見,我以完全相同的方式處理ACTION_UP和ACTION_CANCEL。

我到處都返回false,以便OnClickListener觸發,如果我返回true則不會觸發它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM