概述
事件處理機制是一種事件處理框架,其設計目的是把GUI互動動作(單擊、選單選擇等)轉變為調用相關的事件處理程式進行處理。JDK 1.1以後Java採取了授權處理機制(Delegation—based Model),事件源可以把在其自身所有可能發生的事件分別授權給不同的事件處理者來處理。
由於視窗管理器無法直接調用開發人員提供的事件處理程式,必須在運行時告訴事件模型哪一個例程用於處理事件。因此,為了獲取任何事件,開發人員必須事先通知視窗系統,令其將事件傳送給自己提供的事件處理程式,把事件處理程式註冊為視窗管理器中的一個回調例程.使之連線到產生事件的組件上。
對象
在事件處理機制中有幾個構成要素及其之間的相可:關係是非常重要的,主要包括事件、事件源、事件監聽器、事件適配器等。
1)事件(Event):可以理解為對一個組件的某種同類型操作動作的集合。例如,單擊一個按鈕、在文本框中輸入一個字元串、選擇一個選單選項、選中一個單選按鈕等都可以認為是一個操作動作。而利用滑鼠單擊按鈕、進入按鈕、移出按鈕、按下按鈕、鬆開按鈕等,可以認為是同一種類型的動作操作,因其都是通過滑鼠完成的,這種同類型的動作操作,就可以統一的由滑鼠事件來描述。Java按照事件產生的方式,將事件歸類匯總後分為若干種類型,如滑鼠事件、鍵盤事件、視窗事件、選擇事件等
2)事件源(Event Source):可以理解為產生事件的源頭,也即發生事件的組件。
Java認為,如果組件產生了一個動作,就表明發生了這個動作所歸屬的事件一例如,單擊一次btn按鈕,則btn按鈕就是一個事件源,對應的事件為滑鼠事件;在tf文本框中輸入一個
字元串,則tf文本框也是一個事件源,對應的事件為鍵盤事件。
3)事件監聽器(Listener):事件處理機制中的核心部分它的主要功能如下:①監聽組件,觀察組件有沒有發生某類事件;②如果監聽的組件發生了某類事件,則調用對應的動作處理方法立刻處理這個事件。通過監聽器的功能可以看出,在Java事件處理機制中,監聽器處於主體地位,與事件分類對應,監聽器也相應地分成若干種類型,如滑鼠事件對應滑鼠監聽器,鍵盤事件對應鍵盤監聽器,視窗事件對應視窗監聽器等。需要說明的是,如果希望監聽並處理一個組件的某類事件,則必須先給該組件添加塒應的事件監聽器。如果不給組件添加事件監聽器,則該組件發生任何的事件都不會被監聽器監聽到,從而也不會產生任何的回響。監聽器屬於接口類型,實現某一種監聽器就必須實現該監聽器的所有方法。
4)事件適配器(Adapter):這個概念可以認為是一個簡化版的
監聽器。監聽器是對一類事件可能產生的所有動作進行監聽。例如,滑鼠監聽器監聽的是滑鼠按鍵能夠產生的所有動作,包括滑鼠單擊、滑鼠按下、滑鼠鬆開等。因為監聽器屬於接口,如果純粹使用監聽器來完成動作處理的操作,則程式必須實現這個監聽器所有的動作處理方法。在進行具體的程式設計時,只需要監聽某類事件中的一個動作即可。例如,有時候我們僅對滑鼠單擊按鈕這個動作感興趣,而對滑鼠進入按鈕、滑鼠移動按鈕等動作不需要進行編程回響動作。這個時候,就可以使用事件適配器,因為
適配器可以由程式設計人員自主選擇監聽和回響的動作,從而簡化了監聽器的監聽工作,當然,相應的能夠監聽的動作會變少,具體需要監聽並回響何種動作,由程式設計人員根據實際需要在代碼中自行指定。
Android事件處理機制
Android平台的事件處理機制有兩種,一種為回調機制,另一種為監聽接口機制。
基於回調機制的事件處理
Android平台中,每個View都有自己的處理事件的回調方法,開發人員可以通過重寫View中的這些回調方法來實現需要的回響事件。當某個事件沒有被任何一個View處理時,便會調用Activity中相應的回調方法。Android提供了以下回調方法供用戶使用:
(1)public boolean onKeyDown(int keyCode,KeyEvent event)。
該方法是接口KeyEvent.Callback中的抽象方法,所有的View全部實現了該接口並重寫了該方法,該方法用來捕捉手機鍵盤被按下的事件。
(2)public boolean onKeyUp(int keyCode,KeyEvent event)。
該方法同樣是接口KeyEvent.Callback中的一個抽象方法,並且所有的View同樣全部實現了該接口並重寫了該方法,onKeyUp方法用來捕捉手機鍵盤按鍵抬起的事件。
(3)public boolean onTouchEvent(MotionEvent event)。
該方法在View類中的定義,並且所有的View子類全部重寫了該方法,
應用程式可以通過該方法處理手機螢幕的觸摸事件。
(4)public boolean onTrackballEvent(MotionEvent event)。
軌跡球的處理方法onTrackBallEvent。所有的View同樣全部實現了該方法。
(5)protected void onFocusChanged(boolean gainFocus,int direction,Rect previously Focuse-dReet)。
該方法是焦點改變的回調方法,當某個控制項重寫了該方法後,當焦點發生變化時,會自動調用該方法來處理焦點改變的事件。
基於監聽接口的事件處理
基於監聽的事件處理主要涉及如下三個對象。
(1)EventSource(事件源)。
事件發生的場所,通常就是各個組件,例如視窗、按鈕、選單等。
(2)Event(事件)。
事件封裝了界面組件上發生的特定事情,通常是一次用戶操作,如果程式需要獲得界面組件上所發生事件的相關信息,一般通過Event對象來取得。
(3)EventListener(事件監聽器)。
負責監聽事件源所發生的事件,並對各種事件作出相應的回響。
Android中常用的事件監聽器
(1)OnClickListener接口。
該接口處理的是點擊事件。在觸控模式下,是在某個View上按下並抬起的組合動作,而在鍵盤模式下,是某個View獲得焦點後點擊確定鍵或者按下軌跡球事件。
(2)OnLongClickListener接口。
OnLongcllickListener接口與之前介紹的OnClickListener接口原理基本相同,只是該接口為View長按事件的捕捉接口,即當長時間按下某個View時觸發的事件。
(3)OnFocusChangeListener接口。
OnFocusChangeListener接口用來處理控制項焦點發生改變的事件。如果註冊了該接口,當某個控制項失去焦點或者獲得焦點時都會觸發該接口中的回調方法。
(4)OnKeyListener接口。
OnKeyListener是對手機鍵盤進行監聽的接口,通過對某個View註冊該監聽,當View獲得焦點並有鍵盤事件時,便會觸發該接口中的回調方法。
(5)OnTouchListener接口。
OnTouchListener接口是用來處理手機螢幕事件的監聽接口,當為View的範圍內觸摸按下、抬起或滑動等動作時都會觸發該事件。
(6)OnCreateContextMIenuLitstener接口。
OnCreateContextMenuListener接口是用來處理上下文選單顯示事件的監聽接口。該方法是定義和註冊上下文選單的另一種方式。
在“Android手機連連看”項目中,我們將使用基於監聽接口方式來進行事件處理,並利用OnClickListener接口來捕獲用戶點擊遊戲地圖的操作。