




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第3章 Android的事件處理3.1 事件處理概述 Android提供兩套了事件處理機(jī)制:提供兩套了事件處理機(jī)制: a、基于、基于監(jiān)聽器監(jiān)聽器的的事件處理:主要做法就是為的的事件處理:主要做法就是為Android界面組件綁定特定的事件監(jiān)聽器。界面組件綁定特定的事件監(jiān)聽器。 b、基于、基于回調(diào)回調(diào)的事件處理:主要做法是重寫的事件處理:主要做法是重寫Android組件特定的回調(diào)方法,或者重寫組件特定的回調(diào)方法,或者重寫Activity的回調(diào)方法。的回調(diào)方法。Android為絕大部分組件都提供了事為絕大部分組件都提供了事件響應(yīng)的回調(diào)方法。件響應(yīng)的回調(diào)方法。3.2 基于監(jiān)聽器的事件處理 事件監(jiān)聽的處
2、理模型中,主要涉及三類對(duì)象:事件監(jiān)聽的處理模型中,主要涉及三類對(duì)象: a、事件源事件源(EventSource):事件發(fā)生的場(chǎng)所,):事件發(fā)生的場(chǎng)所,通常就是各個(gè)組件,例如按鈕、窗口、菜單等。通常就是各個(gè)組件,例如按鈕、窗口、菜單等。 b、事件事件(Event):事件封裝了界面組件上發(fā)生):事件封裝了界面組件上發(fā)生的特定事件(通常就是一次用戶操作)。如果程序的特定事件(通常就是一次用戶操作)。如果程序需要獲得界面組件上所發(fā)生事件的相關(guān)信息,一般需要獲得界面組件上所發(fā)生事件的相關(guān)信息,一般通過通過Event對(duì)象來取得。對(duì)象來取得。 c、事件監(jiān)聽器事件監(jiān)聽器(EventListener):負(fù)責(zé)監(jiān)聽
3、事):負(fù)責(zé)監(jiān)聽事件源所發(fā)生的事件,并對(duì)各種事件做出相應(yīng)的響應(yīng)件源所發(fā)生的事件,并對(duì)各種事件做出相應(yīng)的響應(yīng)。 實(shí)例實(shí)例 codes033.2EventQs 在在public void onClick(View v)參數(shù)中,只有事參數(shù)中,只有事件源,而沒有事件,對(duì)于復(fù)雜事件,則需要傳遞件源,而沒有事件,對(duì)于復(fù)雜事件,則需要傳遞事件信息,如鍵盤事件、觸摸事件。事件信息,如鍵盤事件、觸摸事件。 實(shí)例:控制飛機(jī)移動(dòng)實(shí)例:控制飛機(jī)移動(dòng) codes033.2Plane/ / 去掉窗口標(biāo)題去掉窗口標(biāo)題requestWindowFeature(Window.FEATURE_NO_TITLE); /support
4、RequestWindowFeature/ / 全屏顯示全屏顯示getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);/ / 定義飛機(jī)圖片定義飛機(jī)圖片plane = BitmapFactory.decodeResource(context.getResources(), R.drawable.plane);/獲得屏幕寬和高獲得屏幕寬和高WindowManager windowManager = getWindowManager();
5、Display display = windowManager.getDefaultDisplay();DisplayMetrics metrics = new DisplayMetrics(); display.getMetrics(metrics);/KEYCODE判斷: KeyEvent.KEYCODE_W/設(shè)置可以獲取焦點(diǎn) setFocusable(true); Android為不同的界面組件提供了不同的監(jiān)聽器為不同的界面組件提供了不同的監(jiān)聽器接口,通常以內(nèi)部類的形式存在,以接口,通常以內(nèi)部類的形式存在,以View為例:為例: 在程序中實(shí)現(xiàn)事件監(jiān)聽器,通常有如下幾種形式在程序中實(shí)現(xiàn)事件
6、監(jiān)聽器,通常有如下幾種形式: 內(nèi)部類內(nèi)部類 外部類外部類 Activity本身作為事件監(jiān)聽器類本身作為事件監(jiān)聽器類 匿名內(nèi)部類形式匿名內(nèi)部類形式3.2.4 外部類作為事件監(jiān)聽器類 使用外部類形式比較少見,原因:使用外部類形式比較少見,原因: 事件監(jiān)聽器通常屬于特定的事件監(jiān)聽器通常屬于特定的GUI界面,定義成外部界面,定義成外部類不利于提高程序的內(nèi)聚性類不利于提高程序的內(nèi)聚性 外部類不能自由訪問外部類不能自由訪問GUI界面的類中的組件,編程界面的類中的組件,編程不夠簡(jiǎn)潔不夠簡(jiǎn)潔 但如果某個(gè)事件監(jiān)聽器需要被多個(gè)但如果某個(gè)事件監(jiān)聽器需要被多個(gè)GUI界面所共界面所共享,則可以考慮使用外部類形式。享,則
7、可以考慮使用外部類形式。 實(shí)例:長(zhǎng)按后發(fā)送短信實(shí)例:長(zhǎng)按后發(fā)送短信 codes033.2SendSms/ / 獲取短信管理器獲取短信管理器SmsManager smsManager = SmsManager.getDefault();/ 創(chuàng)建發(fā)送短信的創(chuàng)建發(fā)送短信的PendingIntentPendingIntent sentIntent = PendingIntent.getBroadcast(act , 0, new Intent(), 0);/ 發(fā)送文本短信發(fā)送文本短信smsManager.sendTextMessage(addressStr, null, contentStr , se
8、ntIntent, null); 在在androidmanifest.xml文件中配置權(quán)限:文件中配置權(quán)限: 3.2.5 Activity本身作為監(jiān)聽器本身作為監(jiān)聽器 不太常見,容易造成程序結(jié)構(gòu)混亂。不太常見,容易造成程序結(jié)構(gòu)混亂。 實(shí)例:實(shí)例:codes033.2ActivityListener 3.2.6 匿名類匿名類 實(shí)例:實(shí)例: codes033.2AnonymousListener 3.2.7 綁定到標(biāo)簽綁定到標(biāo)簽 實(shí)例:實(shí)例: codes033.2BindingTag3.3 基于回調(diào)的事件處理 在回調(diào)機(jī)制中,當(dāng)用戶組在回調(diào)機(jī)制中,當(dāng)用戶組GUI組件上激發(fā)某個(gè)事組件上激發(fā)某個(gè)事件時(shí),
9、組件自己特定的方法會(huì)處理該事件。件時(shí),組件自己特定的方法會(huì)處理該事件。 為了使用回調(diào)機(jī)制處理事件,我們需要重寫該類為了使用回調(diào)機(jī)制處理事件,我們需要重寫該類的事件處理方法。的事件處理方法。3.3.1 回調(diào)機(jī)制與監(jiān)聽機(jī)制 Android為所有的為所有的GUI組件提供了事件處理的回調(diào)組件提供了事件處理的回調(diào)方法,以方法,以View為例:為例: onKeyDown(int keyCode,KeyEvent event) onKeyLongPress(int keyCode,KeyEvent event) onKeyShortcut(int keyCode,KeyEvent event) onKeyU
10、p(int keyCode,KeyEvent event) onTouchEvent(MotionEvent event) onTrackballEvent(MotionEvent event) 實(shí)例:自定義實(shí)例:自定義Button重寫重寫onKeyDown codes033.3CallbackHandler 幾乎所有基于回調(diào)事件處理方法都有一個(gè)幾乎所有基于回調(diào)事件處理方法都有一個(gè)booleanboolean類的返回值,該返回值是用來表示處理類的返回值,該返回值是用來表示處理方法是否能完全處理該事件。方法是否能完全處理該事件。 如果返回的是如果返回的是truetrue,表示該事件已完全處理,不
11、會(huì),表示該事件已完全處理,不會(huì)再傳播再傳播 如果返回的是如果返回的是falsefalse,表示該事件沒有完全處理,表示該事件沒有完全處理,需要繼續(xù)傳播需要繼續(xù)傳播 實(shí)例:事件從實(shí)例:事件從Button傳播到傳播到Activity codes033.3Propagationcodes033.3Propagation 當(dāng)該組件上發(fā)生某個(gè)按鍵被按下的事件時(shí),當(dāng)該組件上發(fā)生某個(gè)按鍵被按下的事件時(shí),AndroidAndroid系統(tǒng)最先觸發(fā)的應(yīng)該是該按鍵上綁定的事系統(tǒng)最先觸發(fā)的應(yīng)該是該按鍵上綁定的事件件監(jiān)聽器監(jiān)聽器,接著才觸發(fā)該組件提供的事件,接著才觸發(fā)該組件提供的事件回調(diào)方法回調(diào)方法,然后還會(huì)傳播到該組
12、件所在的,然后還會(huì)傳播到該組件所在的ActivityActivity3.3.3 重寫onTouchEvent將上一章將上一章“實(shí)例:跟隨手指的小球?qū)嵗焊S手指的小球”改成基于回改成基于回調(diào)的實(shí)現(xiàn)調(diào)的實(shí)現(xiàn) 實(shí)例:實(shí)例: codes033.3CustomView3.4 響應(yīng)系統(tǒng)設(shè)置的事件 在開發(fā)在開發(fā)Android應(yīng)用時(shí),有時(shí)候可能需要讓應(yīng)用應(yīng)用時(shí),有時(shí)候可能需要讓應(yīng)用程序隨系統(tǒng)設(shè)置而進(jìn)行調(diào)整,比如判斷系統(tǒng)的屏程序隨系統(tǒng)設(shè)置而進(jìn)行調(diào)整,比如判斷系統(tǒng)的屏幕方向、判斷系統(tǒng)方向的方向?qū)Ш皆O(shè)備等幕方向、判斷系統(tǒng)方向的方向?qū)Ш皆O(shè)備等3.4.1 Configuration類簡(jiǎn)介 ConfigurationC
13、onfiguration類專門描述手機(jī)設(shè)備上的配置信類專門描述手機(jī)設(shè)備上的配置信息,這些配置信息既包括用戶特定的配置項(xiàng),也息,這些配置信息既包括用戶特定的配置項(xiàng),也包括系統(tǒng)的動(dòng)態(tài)設(shè)備配置。包括系統(tǒng)的動(dòng)態(tài)設(shè)備配置。 程序中可調(diào)用程序中可調(diào)用Activity的如下方法來獲取的如下方法來獲取Configuration對(duì)象對(duì)象/獲取系統(tǒng)的獲取系統(tǒng)的Configuration對(duì)象對(duì)象 Configuration cfg = getResources().getConfiguration(); 該對(duì)象的屬性代表的配置信息:該對(duì)象的屬性代表的配置信息: fontScale:獲取當(dāng)前用戶設(shè)置的字體的縮放因子。
14、獲取當(dāng)前用戶設(shè)置的字體的縮放因子。 keyboard:獲取當(dāng)前設(shè)備所關(guān)聯(lián)的鍵盤類型。該屬性獲取當(dāng)前設(shè)備所關(guān)聯(lián)的鍵盤類型。該屬性的返回值:的返回值:KEYBOARD_12KEY(只有只有1212個(gè)鍵的小鍵個(gè)鍵的小鍵盤)、盤)、KEYBOARD_NOKEYS、KEYBOARD_QWERTY(普通鍵盤)普通鍵盤) keyboardHidden:該屬性返回一個(gè)該屬性返回一個(gè)boolean值用于標(biāo)識(shí)值用于標(biāo)識(shí)當(dāng)前鍵盤是否可用。該屬性不僅會(huì)判斷系統(tǒng)的硬件鍵盤當(dāng)前鍵盤是否可用。該屬性不僅會(huì)判斷系統(tǒng)的硬件鍵盤,也會(huì)判斷系統(tǒng)的軟鍵盤(位于屏幕)。,也會(huì)判斷系統(tǒng)的軟鍵盤(位于屏幕)。 locale:獲取用戶當(dāng)前的
15、獲取用戶當(dāng)前的Locale. mcc:獲取移動(dòng)信號(hào)的國(guó)家碼獲取移動(dòng)信號(hào)的國(guó)家碼 mnc:獲取移動(dòng)信號(hào)的網(wǎng)絡(luò)碼獲取移動(dòng)信號(hào)的網(wǎng)絡(luò)碼 navigation:判斷系統(tǒng)上方向?qū)Ш皆O(shè)備的類型。該屬性判斷系統(tǒng)上方向?qū)Ш皆O(shè)備的類型。該屬性的返回值:的返回值:NAVIGATION_NONAV(無導(dǎo)航)、無導(dǎo)航)、NAVIGATION_DPAD(DPAD導(dǎo)航)導(dǎo)航) NAVIGATION_TRACKBALL(軌跡球?qū)Ш剑④壽E球?qū)Ш剑?、NAVIGATION_WHEEL(滾輪導(dǎo)航)滾輪導(dǎo)航) orientation:獲取系統(tǒng)屏幕的方向。該屬性的返回值:獲取系統(tǒng)屏幕的方向。該屬性的返回值:ORIENTATION_L
16、ANDSCAPE(橫向屏幕)、橫向屏幕)、ORIENTATION_PORTRAIT(豎向屏幕)豎向屏幕) touchscreen:獲取系統(tǒng)觸摸屏的觸摸方式。該屬性的獲取系統(tǒng)觸摸屏的觸摸方式。該屬性的返回值:返回值:TOUCHSCREEN_NOTOUCH(無觸摸屏)無觸摸屏)、TOUCHSCREEN_STYLUS(觸摸筆式觸摸屏)、觸摸筆式觸摸屏)、 TOUCHSCREEN_FINGER(接受手指的觸摸屏)接受手指的觸摸屏) 實(shí)例:獲取系統(tǒng)設(shè)備狀態(tài)實(shí)例:獲取系統(tǒng)設(shè)備狀態(tài) codes033.4ConfigurationTest3.4.2 響應(yīng)系統(tǒng)設(shè)置更改 Activity的的setRequeste
17、dOrientation方法可以方法可以修改屏幕方向。修改屏幕方向。 重寫重寫Activity的的onConfigurationChanged,可,可以響應(yīng)系統(tǒng)設(shè)置更改。以響應(yīng)系統(tǒng)設(shè)置更改。 實(shí)例:監(jiān)聽屏幕方向改變實(shí)例:監(jiān)聽屏幕方向改變 codes033.4ChangeCfg在在Activity中配置中配置configChanges屬性:屬性:android:configChanges=orientation|screenSize3.5 Handler消息傳遞機(jī)制 Handler是是Android操作系統(tǒng)中的線程通信工具操作系統(tǒng)中的線程通信工具消息消息Message Queue將消息發(fā)送到將消
18、息發(fā)送到消息隊(duì)列中消息隊(duì)列中將消息從消息隊(duì)將消息從消息隊(duì)列中取出處理列中取出處理 實(shí)例:自動(dòng)播放動(dòng)畫實(shí)例:自動(dòng)播放動(dòng)畫 codes033.5HandlerTest3.5.2 Handler工作原理 在主線程中向子線程(在主線程中向子線程(worker thread)發(fā)送消)發(fā)送消息:息:Looper.prepare(); mHandler = new Handler() public void handleMessage(Message msg) / process incoming messages here ; Looper.loop(); 實(shí)例:使用新線程計(jì)算質(zhì)數(shù)實(shí)例:使用新線程計(jì)算質(zhì)數(shù)
19、 codes033.5CalPrime3.6 異步任務(wù) AsyncTask,是是android提供的輕量級(jí)的異步類提供的輕量級(jí)的異步類,可以直接繼承可以直接繼承AsyncTask,在類中實(shí)現(xiàn)異步操作在類中實(shí)現(xiàn)異步操作,并提供接口反饋當(dāng)前異步執(zhí)行的程度并提供接口反饋當(dāng)前異步執(zhí)行的程度(可以通過接可以通過接口實(shí)現(xiàn)口實(shí)現(xiàn)UI進(jìn)度更新進(jìn)度更新),最后反饋執(zhí)行的結(jié)果給最后反饋執(zhí)行的結(jié)果給UI主主線程線程. Android的的AsyncTask比比Handler更輕量級(jí)一些更輕量級(jí)一些,適用于簡(jiǎn)單的異步處理。,適用于簡(jiǎn)單的異步處理。 由于由于AsyncTask是一個(gè)抽象類,所以如果我們想是一個(gè)抽象類,所以
20、如果我們想使用它,就必須要?jiǎng)?chuàng)建一個(gè)子類去繼承它。在繼使用它,就必須要?jiǎng)?chuàng)建一個(gè)子類去繼承它。在繼承時(shí)我們可以為承時(shí)我們可以為AsyncTask類指定三個(gè)泛型參數(shù)類指定三個(gè)泛型參數(shù),這三個(gè)參數(shù)的用途如下:,這三個(gè)參數(shù)的用途如下: 1 1)ParamsParams:?jiǎn)?dòng)任務(wù)執(zhí)行的輸入?yún)?shù)類型:?jiǎn)?dòng)任務(wù)執(zhí)行的輸入?yún)?shù)類型 2 2)ProgressProgress:后臺(tái)任務(wù)完成的進(jìn)度值的類型:后臺(tái)任務(wù)完成的進(jìn)度值的類型 3 3)ResultResult:后臺(tái)執(zhí)行任務(wù)完成后返回結(jié)果的類型:后臺(tái)執(zhí)行任務(wù)完成后返回結(jié)果的類型abstractclassAsyncTask實(shí)現(xiàn)AsyncTask實(shí)現(xiàn)步驟 1 1)創(chuàng)建)創(chuàng)建AsyncTask的子類,并為三個(gè)泛型參數(shù)指定類型的子類,并為三個(gè)泛型參數(shù)指定類型。如果某個(gè)泛型參數(shù)不需要指定類型,可將它指定為。如果某個(gè)泛型參數(shù)不需要指定類型,可將它指定為Void 2)根據(jù)需要,實(shí)現(xiàn)根據(jù)需要,實(shí)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 青海大學(xué)《多元統(tǒng)計(jì)分析與建模》2023-2024學(xué)年第二學(xué)期期末試卷
- 浙江工商職業(yè)技術(shù)學(xué)院《物流裝備課程設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 中央財(cái)經(jīng)大學(xué)《ndustraOrganatonofBankng》2023-2024學(xué)年第二學(xué)期期末試卷
- 2024-2025學(xué)年山東省德州市平原縣第一中學(xué)高三新時(shí)代NT抗疫愛心卷(II)物理試題含解析
- 江蘇商貿(mào)職業(yè)學(xué)院《現(xiàn)代人工智能技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 高平市2024-2025學(xué)年三年級(jí)數(shù)學(xué)第二學(xué)期期末教學(xué)質(zhì)量檢測(cè)模擬試題含解析
- 貴州體育職業(yè)學(xué)院《基礎(chǔ)醫(yī)學(xué)概論下》2023-2024學(xué)年第二學(xué)期期末試卷
- 公共交通智能調(diào)度管理制度
- 工傷認(rèn)證所有流程
- 中水管線施工方案
- DB12T 1315-2024城市內(nèi)澇氣象風(fēng)險(xiǎn)等級(jí)
- 歷史-浙江天域全國(guó)名校協(xié)作體2025屆高三下學(xué)期3月聯(lián)考試題和解析
- 高等數(shù)學(xué)(慕課版)教案 教學(xué)設(shè)計(jì)-1.3 極限的運(yùn)算法則;1.4 極限存在準(zhǔn)則與兩個(gè)重要極限
- 2025年淮北職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)附答案
- 2025屆高三化學(xué)一輪復(fù)習(xí) 化學(xué)工藝流程題說題 課件
- 第四周主題班會(huì)教案38婦女節(jié)《“致敬了不起的她”》
- 2025中國(guó)福州外輪代理限公司招聘15人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 醫(yī)院化驗(yàn)室管理制度
- 新課標(biāo)(水平三)體育與健康《籃球》大單元教學(xué)計(jì)劃及配套教案(18課時(shí))
- 記賬實(shí)操-新能源科技有限公司的賬務(wù)處理示例
- 《籃球規(guī)則》課件
評(píng)論
0/150
提交評(píng)論