天天看點

onTouch,onClick,onLongClick事件觸發分析

最近因為自定義View用到了事件分發的知識,于是就取典總結記錄了一下,今天先總結

一下onTouch,onClick,onLongClick事件發生先後順序和關聯, 大家可以交流一下。

首先onTouch()方法是解析view被觸摸的三種狀态down、move、up,onClick,onLongClick事件都是根據down和up狀态傳回值決定觸發或者不觸發。

第一種情況:onTouch傳回false

首先是onTouch事件的down事件發生,此時,如果長按沒有up,觸發onLongClick事件;當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傳回true,長按,觸發onLongClick事件,然後是onTouch事件的up事件發生,完畢。 短按,先觸發onTouch的up事件,由于up傳回true,表示事件一直沒有結束,一直在長按, 達到長按臨界時間後,自動觸發onLongClick事件,而onClick事件沒有觸發到。