標籤:android io ar sp on cti 時間 bs text
android組件中的onTouch,onClick,onLongClick事件發生先後順序和關聯:
一,onTouch返回false
首先是onTouch事件的down事件發生,此時,如果長按,觸發onLongClick事件;
然後是onTouch事件的up事件發生,up完畢,最後觸發onClick事件。
二,onTouch返回true
首先是onTouch事件的down事件發生,然後是onTouch事件的up事件發生;期間不觸發onClick和onLongClick事件
三,onTouch:down返回true,up返回false:結果同二。
機制分析:
onTouch事件中:down事件傳回值標記此次事件是否為點擊事件(返回false,是點擊事件;返回true,不記為點擊事件),而up事件標記此次事件結束時間,也就是判斷是否為長按。
只要當down返回true時候,系統將不把本次事件記錄為點擊事件,也就不會觸發onClick或者onLongClick事件了。因此儘管當up的時候返回false,系統也不會繼續觸發onClick事件了。
四,onTouch:down返回false,up返回true:
首先是onTouch事件的down事件發生,此時:
長按,觸發onLongClick事件,然後是onTouch事件的up事件發生,完畢。
短按,先觸發onTouch的up事件, 到一定時間後,自動觸發onLongClick事件。
機制分析:
onTouch事件中:down事件傳回值標記此次事件是否為點擊事件(返回false,是點擊事件;返回true,不記為點擊事件),而up事件標記此次事件結束時間,也就是判斷是否為長按。
當down返回false,標記此次事件為點擊事件,而up返回了true,則表示此次事件一直沒有結束,也就是一直長按下去了,達到長按臨界時間後,自然觸發長按事件,而onClick事件沒有觸發到
Android的各個View之間的關係是一顆樹,下面的子View都是在父View的基礎上建立的,可以看成子View疊加在父類的View上。下面我們來看一下兩種不同情況的事件處理。
1、給同一個View設定了OnTouchEvent事件、OnClickListener事件與OnLongClickListener事件,當點擊View的時候,事件的響應順序是:
Touch事件的ACTION_DOWN -> ACTION_UP -> OnClick/OnLongClick。
View是怎麼響應這個點擊動作的呢?
首先,該View會先響應ACTION_DOWN事件,並返回一個boolean值,這裡有兩種判斷:
a:返回True,表示該View接受此按下動作,就是說這個點擊動作的按下操作被中止,然後就是響應ACTION_UP事件。點擊動作的按下操作被ACTION_DOWN接受之後就結束了,所以之後的OnClick/OnLongClick事件就不會響應了。
b:返回false,表示該View不接受此按下動作,響應完之後,按下操作繼續往下發,之後是響應ACTION_UP事件,這裡又有一個判斷:
如果ACTION_UP事件返回True,表示ACTION_UP接受鬆開操作,鬆開操作中止;View會一直處於按下狀態,之後View便會響應OnLongClick事件。
如果ACTION_UP事件返回false,表示ACTION_UP不接收鬆開操作,鬆開操作繼續下發;因為按下與鬆開操作都沒有被中止,所以之後View就會響應OnClick事件。
2、多個View之間的事件響應:
如果有多層View,一個layout布局,在此布局上放一個TextView,並將TextView的寬高設定為fill_parent(確保點擊的是在TextVIew上)。給Activity與TextView都設定OnTouchListener事件。事件響應的順序是先從頂層的View開始的。所以,當點擊螢幕時(TextView所在地區的螢幕)。
TextView響應ACTION_DOWN,返回false,ACTION_DOWN繼續下發,Activity響應ACTION_DOWN事件。如果返回true,表示ACTION_DOWN到TextView就被中止了,而不會繼續往下被Activity捕獲了。
ACTION_UP的回應程式式有點不同,響應ACTION_UP的有兩種條件,必須滿足其一:
a、最下面一層(此處是Activity)。
b、其對應的ACTION_DOWN是終止點,即其ACTION_DOWN的傳回值為true;
Android開發詳解之onTouch和onClick詳解