場景:
控件使用OnTouchListener()事件監(jiān)聽,正常的流程是爷狈,按下瞬間屏幕捕捉到觸摸拯辙,觸發(fā)MotionEvent.ACTION_DOWN事件,滑動屏幕會觸發(fā)MotionEvent.ACTION_MOVE事件企垦,手指離開屏幕會觸發(fā)MotionEvent.ACTION_UP事件环壤,這是我們所想要的事件觸發(fā)流程,但是這不是絕對的.
舉例:
假如我們的步驟使:按下-長按-松手竹观,出現(xiàn)MotionEvent.ACTION_UP事件不觸發(fā)的情況镐捧,而是觸發(fā)了MotionEvent.ACTION_CANCEL事件.綜上,短暫長按松手時觸發(fā)流程是:MotionEvent.ACTION_DOWN-(滑動MotionEvent.ACTION_MOVE)-MotionEvent.ACTION_UP,長時間長按的觸發(fā)流程:MotionEvent.ACTION_DOWN-滑動MotionEvent.ACTION_MOVE-MotionEvent.ACTION_UP)臭增,MotionEvent.ACTION_DOWN-不滑動-MotionEvent.ACTION_CANCLE.
解釋:
長按的時間多久才會觸發(fā)MotionEvent.ACTION_CANCLE《础?這個博主目前沒有一個定論.所以為了避免出錯誊抛,應該在代碼中加入MotionEvent.ACTION_CANCLE的觸發(fā)操作.
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
//按鈕按下邏輯
break列牺;
case MotionEvent.ACTION_UP:
//按鈕彈起邏輯
break;
case MotionEvent.ACTION_CANCEL:
//按鈕彈起邏輯
break拗窃;
}
注:這種情況只會出現(xiàn)在部分機型上瞎领,可能在一些機型上不服復現(xiàn)MotionEvent.ACTION_CANCEL的問題,目前已知出現(xiàn)問題的機型有:
安卓9.0随夸,小米5,長按抬起事件是ACTION_CANCEL
安卓8.0九默,小米6,長按抬起事件是ACTION_CANCEL
安卓6.0,紅米4,長按抬起事件是ACTION_CANCEL
安卓6.0宾毒,榮耀7,長按抬起事件是ACTION_UP
————————————————
版權(quán)聲明:本文為CSDN博主「已經(jīng)畢業(yè)的C先生」的原創(chuàng)文章驼修,遵循CC 4.0 by-sa版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明诈铛。
原文鏈接:https://blog.csdn.net/cqx13763055264/article/details/86543140