




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第3章Android的事件處理3.1事件處理概述Android提供兩套了事件處理機制:a、基于監(jiān)聽器的的事件處理:主要做法就是為Android界面組件綁定特定的事件監(jiān)聽器。b、基于回調(diào)的事件處理:主要做法是重寫Android組件特定的回調(diào)方法,或者重寫Activity的回調(diào)方法。Android為絕大部分組件都提供了事件響應的回調(diào)方法。3.2基于監(jiān)聽器的事件處理事件監(jiān)聽的處理模型中,主要涉及三類對象:a、事件源(EventSource):事件發(fā)生的場所,通常就是各個組件,例如按鈕、窗口、菜單等。b、事件(Event):事件封裝了界面組件上發(fā)生的特定事件(通常就是一次用戶操作)。如果程序需要獲得界面組件上所發(fā)生事件的相關信息,一般通過Event對象來取得。c、事件監(jiān)聽器(EventListener):負責監(jiān)聽事件源所發(fā)生的事件,并對各種事件做出相應的響應。實例\codes\03\3.2\EventQs在publicvoidonClick(Viewv)參數(shù)中,只有事件源,而沒有事件,對于復雜事件,則需要傳遞事件信息,如鍵盤事件、觸摸事件。實例:控制飛機移動\codes\03\3.2\Plane//去掉窗口標題
requestWindowFeature(Window.FEATURE_NO_TITLE);//supportRequestWindowFeature//全屏顯示
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);//定義飛機圖片
plane=BitmapFactory.decodeResource(context.getResources(),R.drawable.plane);//獲得屏幕寬和高
WindowManagerwindowManager=getWindowManager();
Displaydisplay=windowManager.getDefaultDisplay();
DisplayMetricsmetrics=newDisplayMetrics();
display.getMetrics(metrics);//KEYCODE判斷:KeyEvent.KEYCODE_W//設置可以獲取焦點setFocusable(true);Android為不同的界面組件提供了不同的監(jiān)聽器接口,通常以內(nèi)部類的形式存在,以View為例:在程序中實現(xiàn)事件監(jiān)聽器,通常有如下幾種形式:內(nèi)部類外部類Activity本身作為事件監(jiān)聽器類匿名內(nèi)部類形式3.2.4外部類作為事件監(jiān)聽器類使用外部類形式比較少見,原因:事件監(jiān)聽器通常屬于特定的GUI界面,定義成外部類不利于提高程序的內(nèi)聚性外部類不能自由訪問GUI界面的類中的組件,編程不夠簡潔但如果某個事件監(jiān)聽器需要被多個GUI界面所共享,則可以考慮使用外部類形式。實例:長按后發(fā)送短信\codes\03\3.2\SendSms//獲取短信管理器
SmsManagersmsManager=SmsManager.getDefault();
//創(chuàng)建發(fā)送短信的PendingIntent
PendingIntentsentIntent=PendingIntent.getBroadcast(act,0,newIntent(),0);
//發(fā)送文本短信
smsManager.sendTextMessage(addressStr,null,contentStr,sentIntent,null);在androidmanifest.xml文件中配置權限:<uses-permissionandroid:name="android.permission.SEND_SMS"/>3.2.5Activity本身作為監(jiān)聽器不太常見,容易造成程序結構混亂。實例:\codes\03\3.2\ActivityListener3.2.6匿名類實例:\codes\03\3.2\AnonymousListener3.2.7綁定到標簽實例:\codes\03\3.2\BindingTag3.3基于回調(diào)的事件處理在回調(diào)機制中,當用戶組GUI組件上激發(fā)某個事件時,組件自己特定的方法會處理該事件。為了使用回調(diào)機制處理事件,我們需要重寫該類的事件處理方法。3.3.1回調(diào)機制與監(jiān)聽機制Android為所有的GUI組件提供了事件處理的回調(diào)方法,以View為例:onKeyDown(intkeyCode,KeyEventevent)onKeyLongPress(intkeyCode,KeyEventevent)onKeyShortcut(intkeyCode,KeyEventevent)onKeyUp(intkeyCode,KeyEventevent)onTouchEvent(MotionEventevent)onTrackballEvent(MotionEventevent)實例:自定義Button重寫onKeyDown\codes\03\3.3\CallbackHandler幾乎所有基于回調(diào)事件處理方法都有一個boolean類的返回值,該返回值是用來表示處理方法是否能完全處理該事件。如果返回的是true,表示該事件已完全處理,不會再傳播如果返回的是false,表示該事件沒有完全處理,需要繼續(xù)傳播實例:事件從Button傳播到Activity\codes\03\3.3\Propagation當該組件上發(fā)生某個按鍵被按下的事件時,Android系統(tǒng)最先觸發(fā)的應該是該按鍵上綁定的事件監(jiān)聽器,接著才觸發(fā)該組件提供的事件回調(diào)方法,然后還會傳播到該組件所在的Activity3.3.3重寫onTouchEvent將上一章“實例:跟隨手指的小球”改成基于回調(diào)的實現(xiàn)實例:\codes\03\3.3\CustomView3.4響應系統(tǒng)設置的事件在開發(fā)Android應用時,有時候可能需要讓應用程序隨系統(tǒng)設置而進行調(diào)整,比如判斷系統(tǒng)的屏幕方向、判斷系統(tǒng)方向的方向導航設備等3.4.1Configuration類簡介Configuration類專門描述手機設備上的配置信息,這些配置信息既包括用戶特定的配置項,也包括系統(tǒng)的動態(tài)設備配置。程序中可調(diào)用Activity的如下方法來獲取Configuration對象//獲取系統(tǒng)的Configuration對象Configurationcfg=getResources().getConfiguration();該對象的屬性代表的配置信息:fontScale:獲取當前用戶設置的字體的縮放因子。keyboard:獲取當前設備所關聯(lián)的鍵盤類型。該屬性的返回值:KEYBOARD_12KEY(只有12個鍵的小鍵盤)、KEYBOARD_NOKEYS、KEYBOARD_QWERTY(普通鍵盤)keyboardHidden:該屬性返回一個boolean值用于標識當前鍵盤是否可用。該屬性不僅會判斷系統(tǒng)的硬件鍵盤,也會判斷系統(tǒng)的軟鍵盤(位于屏幕)。locale:獲取用戶當前的Locale.mcc:獲取移動信號的國家碼mnc:獲取移動信號的網(wǎng)絡碼navigation:判斷系統(tǒng)上方向導航設備的類型。該屬性的返回值:NAVIGATION_NONAV(無導航)、NAVIGATION_DPAD(DPAD導航)NAVIGATION_TRACKBALL(軌跡球導航)、NAVIGATION_WHEEL(滾輪導航)orientation:獲取系統(tǒng)屏幕的方向。該屬性的返回值:ORIENTATION_LANDSCAPE(橫向屏幕)、ORIENTATION_PORTRAIT(豎向屏幕)touchscreen:獲取系統(tǒng)觸摸屏的觸摸方式。該屬性的返回值:TOUCHSCREEN_NOTOUCH(無觸摸屏)、TOUCHSCREEN_STYLUS(觸摸筆式觸摸屏)、TOUCHSCREEN_FINGER(接受手指的觸摸屏)實例:獲取系統(tǒng)設備狀態(tài)\codes\03\3.4\ConfigurationTest3.4.2響應系統(tǒng)設置更改Activity的setRequestedOrientation方法可以修改屏幕方向。重寫Activity的onConfigurationChanged,可以響應系統(tǒng)設置更改。實例:監(jiān)聽屏幕方向改變\codes\03\3.4\ChangeCfg在Activity中配置configChanges屬性:android:configChanges="orientation|screenSize"3.5Handler消息傳遞機制Handler是Android操作系統(tǒng)中的線程通信工具消息MessageQueue將消息發(fā)送到消息隊列中將消息從消息隊列中取出處理實例:自動播放動畫\codes\03\3.5\HandlerTest3.5.2Handler工作原理在主線程中向子線程(workerthread)發(fā)送消息:Looper.prepare();mHandler=newHandler(){publicvoidhandleMessage(Messagemsg){ //processincomingmessageshere}};Looper.loop();實例:使用新線程計算質(zhì)數(shù)\codes\03\3.5\CalPrime3.6異步任務AsyncTask,是android提供的輕量級的異步類,可以直接繼承AsyncTask,在類中實現(xiàn)異步操作,并提供接口反饋當前異步執(zhí)行的程度(可以通過接口實現(xiàn)UI進度更新),最后反饋執(zhí)行的結果給UI主線程.Android的AsyncTask比Handler更輕量級一些,適用于簡單的異步處理。由于AsyncTask是一個抽象類,所以如果我們想使用它,就必須要創(chuàng)建一個子類去繼承它。在繼承時我們可以為AsyncTask類指定三個泛型參數(shù),這三個參數(shù)的用途如下:1)Params:啟動任務執(zhí)行的輸入?yún)?shù)類型2)Progress:后臺任務完成的進度值的類型3)Result:后臺執(zhí)行任務完成后返回結果的類型abstract
class
AsyncTask<Params,
Progress,
Result>實現(xiàn)AsyncTask實現(xiàn)步驟1)創(chuàng)建AsyncTask的子類,并為三個泛型參數(shù)指定類型。如果某個泛型參數(shù)不需要指定類型,可將它指定為Void2)根據(jù)需要,實現(xiàn)AsyncTask的如下方法:(1)doInBackground(Params...):重寫該方法是后臺線程將要完成的任務。該方法可以調(diào)用publishProgress(Progress...values)方法更新任務的執(zhí)行進度。(2)onProgressUpdate(Progress..values):在doInBackground()方法中調(diào)用publishProgress()方法更新任務的執(zhí)行進度后,將會觸發(fā)該方法。(3)onPreExecute():該方法將在
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年巴中職業(yè)技術學院單招職業(yè)適應性測試題庫標準卷
- 2025年安徽省宣城市單招職業(yè)傾向性考試題庫及參考答案1套
- 2025年安康職業(yè)技術學院單招職業(yè)適應性測試題庫參考答案
- 2025年保定理工學院單招職業(yè)適應性測試題庫及參考答案1套
- 2025年安徽省六安市單招職業(yè)適應性測試題庫必考題
- 2025年安徽糧食工程職業(yè)學院單招職業(yè)技能測試題庫標準卷
- 2025年安徽警官職業(yè)學院單招職業(yè)傾向性考試題庫必考題
- 2025年安徽電子信息職業(yè)技術學院單招職業(yè)適應性測試題庫及答案1套
- 2025年安徽省池州市單招職業(yè)傾向性考試題庫1套
- 2025年倉庫續(xù)租合同模板
- 拒絕校園欺凌從我做起完整版課件
- 幼兒園《認識醫(yī)生和護士》課件
- 技術進口合同登記證
- DZ∕T 0372-2021 固體礦產(chǎn)選冶試驗樣品配制規(guī)范(正式版)
- 細菌的分離培養(yǎng)與培養(yǎng)特性觀察課件講解
- 國家電網(wǎng)公司輸變電工程工藝標準庫變電工程部分
- 海上風電場工程結構安全監(jiān)測建設規(guī)范
- 壓力管道焊接2020年壓力管道檢驗師培訓課件
- 甲狀腺功能減退危象課件
- 《體育開學第一課:體育常規(guī)教育》課件
- 上海市高新技術成果轉化項目認定申請書
評論
0/150
提交評論