標籤:
Android提供了兩種事件處理機制:
- 基於監聽的事件處理(委派式事件處理)
- 基於回調的事件處理
當某個事件來源被觸發時(發生事件活動),Android系統最先觸發的是綁定在該事件來源上的事件監聽器,(如果繼續傳播的話)接著才會觸發該事件來源提供的事件回調方法。
Android基於監聽的事件處理的處理模型如下:
事件來源,事件監聽器,註冊事件監聽器
事件來源可以是任何介面組件,註冊事件監聽器就是呼叫事件源的setXxxListener(XxxListener)方法,關鍵是實現事件監聽器類。View.OnClickListener是觸控螢幕事件監聽器必須實現的介面,事件處理器中的事件處理器方法是由系統負責調用的。
Android基於回調的事件處理:
對於Android基於回調的事件處理而言,主要做法就是重寫Android組件特定的回調方法,或者重寫Activity的回調方法。Android為絕大部分介面組件都提供了事件響應的回調方法,只要重寫他們就可以了。一般來說,基於回調的事件處理可用於處理一些具有通用性的事件,基於回調的事件處理代碼回顯得比較簡潔,但對於某些特定的事件處理,無法使用基於回調的事件處理,只能採用基於監聽的事件處理。
幾乎所有基於回調的事件處理方法都有一個boolean類型的傳回值,該傳回值用於標識該處理方法是否能完全處理該事件,為true,表示能處理,為false表示不能處理,繼續傳播出去。
下面的是一個基於觸控螢幕的回調處理方法:
public boolean onTouchEvent(MotionEvent event):相應觸屏事件
參數event:參數event為手機螢幕觸摸事件封裝類的對象,其中封裝了改事件的所有資訊,例如觸摸的位置,觸摸的類型以及觸摸的時間等,該對象會在使用者觸摸手機時被建立。
傳回值:該方法的傳回值是當該監聽器已經完整地處理了改事件且不希望其他回調方法再次處理是返回true,否則返回false。
通過event.getAction擷取使用者觸摸的事件類型,觸摸事件類型有:
MotionEvent.ACTION_DOWN //螢幕被按下
MotionEvent.ACTION_UP //螢幕按下被抬起
MotionEvent.ACTION_MOVE //在螢幕中拖動
通過event.getX()和event.getY()(傳回值為float類型)擷取觸摸位置的X,Y座標(可轉換為其他類型,比如int類型(int)event.getX())
後續深入瞭解參考:http://www.cnblogs.com/xiaoweiz/p/3803301.html
http://wangkuiwu.github.io/2015/01/03/TouchEvent-View/
Android事件處理