android面試題之觸控事件分發與處理簡述
android觸控事件分發與處理
android的分發機制:由父控制元件判斷是否攔截,如果不攔截事件,則繼續分發到子控制元件,然後一直分發下去。
處理:與分發相反,由子控制元件先處理事件,如果子控制元件不處理,則交給父控制元件處理,一直向上傳遞,直到那個控制元件處理了觸控事件
相關方法:Boolean dispatchTouchEvent(MotionEvent ev)接收到觸控事件時,是否分發事件到下面的view,返回true分發觸控事件;不分發返回false,下面的view就拿不到事件
Boolean onInterceptTouchEvent(MotionEvent ev)接收到觸控事件時,是否攔截事件,返回true攔截,則呼叫onTouchEvent方法處理事件;返回false,繼續向子控制元件傳
Boolean onTouchEvent(View v,MotionEvent event)是否響應事件,返回true,響應;返回false不響應
這個方法是基於回撥的
Boolean onTouch(View v,MotionEvent event)處理響應事件,當view呼叫了setOnTouchListener方法設定了觸控監聽器,則事件響應的時候先呼叫onTouch方法
返回true,響應即事件被v消費onTouchEvent方法不執行;返回false時,不響應事件沒有被消費而終止了,並呼叫onTouchEvent方法
這個方法是基於監聽onTouchListener 的
void requestDisallowInterceptTouchEvent(Boolean disallowIntercept)請求父控制元件是否不攔截事件,返回true,不允許父控制元件的onInterceptTouchEvent呼叫;false 允許
事件是否被攔截,要看在當前父級階段能否根據event事件找到消費此事件的控制元件,如果找到則返回true繼續向下分發,否則處理