??? 事件就是用戶對圖形的操作,在android手機和平板電腦上,主要包含物理按鍵事件和觸摸屏事件兩類。物理按鍵事件包含:按下、抬起、長按等;觸摸屏事件主要包含按下、抬起、滾動、雙擊等。
??? 在View中提供了onTouchEvent()方法,可以重寫該方法來處理觸摸屏事件,適用于重寫組件的場景;android中還提供了setOnTouchListener()方法為組件設置監聽器來處理觸摸屏事件。
??? 在android中提供啦兩種方式的事件處理,一種是基于監聽的事件處理,一種是基于回調的事件處理。
一、基于監聽的事件處理
?? 實現基于監聽的事件處理,主要做法就是為android的UI組件綁定特定的事件監聽器,在事件監聽的處理模型中,主要有三個對象:
?? ①、Event Source(事件源):即產生事件的來源,通常是各種組件,例如:按鈕、窗口、菜單等
?? ②、Event(事件):事件中封裝了UI組件上發生的特定事件的具體信息,如果事件需要獲取UI組件上所發生事件的相關信息,一般通過Event對象來傳遞
?? ③、Event Listener(事件監聽器):監聽事件源所發生的事件,并對不同的事件做出相應的相應
二、基于回調的事件處理
??? 實現基于回調的事件處理,就是重寫Android組件特定的回調方法或重寫Activity的回調方法。為了使用回調機制來處理GUI組件(圖形用戶界面)上所發生的事件,需要為該組件提供對應的事件處理方法,可以通過繼承GUI組件類,并重寫該類的事件處理方法來實現。
??? View類中包含的一些事件處理的回調方法:
???? ①、Boolean onKeyDown(int keyCode,keyEvent event)? 當用戶在該組件上按下某個按鍵時觸發
???? ②、Boolean onKeyLongPress(int keyCode,KeyEvent event)? 當用戶在該組件上長按某個按鍵時觸發
???? ③、Boolean onKeyShortcut(int keyCode,KeyEvent event)? 當一個鍵盤快捷鍵事件發生時觸發
???? ④、Boolean onKeyUp(int keyCode,KeyEvent event)? 當用戶在該組件上松開某個按鍵時觸發
???? ⑤、Boolean onTouchEvent(MotionEvent event)? 當用戶在該組件上觸發觸摸屏事件時觸發
???? ⑥、boolean onTrackballEvent(MotionEvent event) 當用戶在該組件上觸發軌跡球事件時觸發
一般來說,基于回調的事件處理方式可用于處理一些通用性的事件,事件處理的代碼會比較簡潔。但對于某些特定的事件,無法采用基于回調的事件處理方式實現時,就只能采用基于監聽的事件處理方式。
三、物理按鍵事件處理
?? ①、Android設備可用物理按鍵及其觸發事件
?? 音量鍵? KEYCODE_VOLUME_UP / KEYCODE_VOLUME_DOWN 控制當前上下音量,如音樂播放器、手機鈴聲、通話音量
?? 返回鍵? KEYCODE_BACK?? 返回到前一個界面
?? 菜單鍵? KEYCODE_MENU?? 顯示當前應用的可用菜單
?? ②、在android中處理物理按鍵事件時,常用的回調方法:
??? onKeyUp()? 當用戶松開某個按鍵時觸發該方法
??? onKeyDown() 當用戶按下(未松開)某個按鍵時觸發該方法
??? onkeyLongPress() 當用戶長按某個按鍵時觸發該方法
??? ③、獲取系統時間:system.currentTimeMillis()
四、觸摸屏事件處理
?? ①、單機事件
???? 在手機應用中,經常需要實現在屏幕中單機某個按鈕或組件執行一些操作,這時就需要通過單機事件來完成。在處理單機事件時,可以通過為組件添加單擊事件監聽器的方法來實現。android為組件提供了setOnClickListener()方法,用于為組件設置單擊事件監聽器。該方法的參數是一個View.OnClickListener接口的實現類對象。View.OnClickListener接口定義如下:
???
1 pubic static interface View.OnClickListener{ 2 public void onClick(View v); 3 4 }
? 在實現View.OnClickListener接口時,需要重寫onClick()方法。當單擊事件觸發后,將調用onClick()方法執行具體的事件處理操作。
ag:為button的按鈕添加一個單擊事件監聽器,并且實現單擊該按鈕時彈出消息提示顯示:單擊了按鈕,代碼如下:
???
Button button =new Button(this) button.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){Toast.makeText(MainActivity.this,"單擊了按鈕",Toast.LENGTH_SHORT).show();} });
?? ②、長按事件
??? 長按事件不同于單擊事件,長按事件需要長按某一個組件2秒之后才會觸發。在處理長按事件時,可以通過為組件添加長按事件監聽器的方法來實現。android為組件提供了setOnLongClickListener()方法,用于為組件設置長按事件監聽器,該方法的參數是View.OnLongClickListener接口的實現類對象,接口定義如下:
1 public static interface View.OnLongClickListener{ 2 3 public void onLongClick(View v) 4 5 }
在實現View.OnLongClickListener接口時,需要重寫onLongClick()方法。當長按事件觸發后,將調用onLongClick()方法執行具體的事件處理操作。