[英]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.