<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Blogger Scott

    Android事件處理模型一(基于回調(diào)機(jī)制的事件處理)

    Android平臺(tái)的事件處理機(jī)制有兩種,一種是基于回調(diào)機(jī)制的,一種是基于監(jiān)聽接口的,現(xiàn)介紹第一種:基于回調(diào)機(jī)制的事件處理。
    Android平臺(tái)中,每個(gè)View都有自己的處理事件的回調(diào)方法,開發(fā)人員可以通過重寫View中的這些回調(diào)方法來實(shí)現(xiàn)需要的響應(yīng)事件。當(dāng)某個(gè)事件沒有被任何一個(gè)View處理時(shí),便會(huì)調(diào)用Activity中相應(yīng)的回調(diào)方法。Android提供了以下回調(diào)方法供用戶使用:
    1. onKeyDown:
       功能:該方法是接口KeyEvent.Callback中的抽象方法,所有的View全部實(shí)現(xiàn)了該接口并重寫了該方法,該方法用來捕捉手機(jī)鍵盤被按下的事件。
       聲明:public boolean onKeyDown (int keyCode, KeyEvent event)
       參數(shù)說明:
      參數(shù)keyCode,該參數(shù)為被按下的鍵值即鍵盤碼,手機(jī)鍵盤中每個(gè)按鈕都會(huì)有其單獨(dú)的鍵盤碼,在應(yīng)用程序都是通過鍵盤碼才知道用戶按下的是哪個(gè)鍵。
           參數(shù)event,該參數(shù)為按鍵事件的對象,其中包含了觸發(fā)事件的詳細(xì)信息,例如事件的狀態(tài)、事件的類型、事件發(fā)生的時(shí)間等。當(dāng)用戶按下按鍵時(shí),系統(tǒng)會(huì)自動(dòng)將事件封  裝成KeyEvent對象供應(yīng)用程序使用。
           返回值,該方法的返回值為一個(gè)boolean類型的變量,當(dāng)返回true時(shí),表示已經(jīng)完整地處理了這個(gè)事件,并不希望其他的回調(diào)方法再次進(jìn)行處理,而當(dāng)返回false時(shí),表示并沒有完全處理完該事件,更希望其他回調(diào)方法繼續(xù)對其進(jìn)行處理,例如Activity中的回調(diào)方法。

    2. onKeyUp:
       功能:該方法同樣是接口KeyEvent.Callback中的一個(gè)抽象方法,并且所有的View同樣全部實(shí)現(xiàn)了該接口并重寫了該方法,onKeyUp方法用來捕捉手機(jī)鍵盤按鍵抬起的事件。
     聲明:public boolean onKeyUp (int keyCode, KeyEvent event)
     參數(shù)說明: 同onKeyDown

    3. onTouchEvent:

       功能:該方法在View類中的定義,并且所有的View子類全部重寫了該方法,應(yīng)用程序可以通過該方法處理手機(jī)屏幕的觸摸事件。

     聲明:public boolean onTouchEvent (MotionEvent event)

     參數(shù)說明: 

       參數(shù)event:參數(shù)event為手機(jī)屏幕觸摸事件封裝類的對象,其中封裝了該事件的所有信息,例如觸摸的位置、觸摸的類型以及觸摸的時(shí)間等。該對象會(huì)在用戶觸摸手機(jī)屏幕時(shí)被創(chuàng)建。

       返回值:該方法的返回值機(jī)理與鍵盤響應(yīng)事件的相同,同樣是當(dāng)已經(jīng)完整地處理了該事件且不希望其他回調(diào)方法再次處理時(shí)返回true,否則返回 false。

     詳細(xì)說明:

      該方法并不像之前介紹過的方法只處理一種事件,一般情況下以下三種情況的事件全部由onTouchEvent方法處理,只是三種情況中的動(dòng)作值不同。

             屏幕被按下:當(dāng)屏幕被按下時(shí),會(huì)自動(dòng)調(diào)用該方法來處理事件,此時(shí)MotionEvent.getAction()的值為 MotionEvent.ACTION_DOWN,如果在應(yīng)用程序中需要處理屏幕被按下的事件,只需重新該回調(diào)方法,然后在方法中進(jìn)行動(dòng)作的判斷即可。
            屏幕被抬起:當(dāng)觸控筆離開屏幕時(shí)觸發(fā)的事件,該事件同樣需要onTouchEvent方法來捕捉,然后在方法中進(jìn)行動(dòng)作判斷。當(dāng) MotionEvent.getAction()的值為MotionEvent.ACTION_UP時(shí),表示是屏幕被抬起的事件。
            在屏幕中拖動(dòng):該方法還負(fù)責(zé)處理觸控筆在屏幕上滑動(dòng)的事件,同樣是調(diào)用MotionEvent.getAction()方法來判斷動(dòng)作值是否為 MotionEvent.ACTION_MOVE再進(jìn)行處理。

    4. onTrackBallEvent:
       功能: 接下來將介紹的是手機(jī)中軌跡球的處理方法onTrackBallEvent。所有的View同樣全部實(shí)現(xiàn)了該方法。
       聲明: public boolean onTrackballEvent (MotionEvent event)
       詳細(xì)說明:該方法的使用方法與前面介紹過的各個(gè)回調(diào)方法基本相同,可以在Activity中重寫該方法,也可以在各個(gè)View的實(shí)現(xiàn)類中重寫。
       參數(shù)event:參數(shù)event為手機(jī)軌跡球事件封裝類的對象,其中封裝了觸發(fā)事件的詳細(xì)信息,同樣包括事件的類型、觸發(fā)時(shí)間等,一般情況下,該對象會(huì)在用戶操控軌跡球時(shí)被創(chuàng)建。
       返回值:該方法的返回值與前面介紹的各個(gè)回調(diào)方法的返回值機(jī)制完全相同,因本書篇幅有限,不再贅述。
       軌跡球與手機(jī)鍵盤的區(qū)別如下所示:
         1) 某些型號的手機(jī)設(shè)計(jì)出的軌跡球會(huì)比只有手機(jī)鍵盤時(shí)更美觀,可增添用戶對手機(jī)的整體印象。
         2) 軌跡球使用更為簡單,例如在某些游戲中使用軌跡球控制會(huì)更為合理。
         3)使用軌跡球會(huì)比鍵盤更為細(xì)化,即滾動(dòng)軌跡球時(shí),后臺(tái)的表示狀態(tài)的數(shù)值會(huì)變化得更細(xì)微、更精準(zhǔn)。
       提示:在模擬器運(yùn)行狀態(tài)下,可以通過F6鍵打開模擬器的軌跡球,然后便可以通過鼠標(biāo)的移動(dòng)來模擬軌跡球事件。

    5.  onFocusChanged:
       功能: 前面介紹的各個(gè)方法都可以在View及Activity中重寫,接下來介紹的onFocusChanged卻只能在View中重寫。該方法是焦點(diǎn)改變的回調(diào)方法,當(dāng)某個(gè)控件重寫了該方法后,當(dāng)焦點(diǎn)發(fā)生變化時(shí),會(huì)自動(dòng)調(diào)用該方法來處理焦點(diǎn)改變的事件。
       聲明:protected void onFocusChanged (boolean gainFocus, int direction, Rect previously FocusedRect)
       詳細(xì)說明:
         參數(shù)gainFocus:參數(shù)gainFocus表示觸發(fā)該事件的View是否獲得了焦點(diǎn),當(dāng)該控件獲得焦點(diǎn)時(shí),gainFocus等于true,否則等于false。
         參數(shù)direction:參數(shù)direction表示焦點(diǎn)移動(dòng)的方向,用數(shù)值表示,有興趣的讀者可以重寫View中的該方法打印該參數(shù)進(jìn)行觀察。
         參數(shù)previouslyFocusedRect:表示在觸發(fā)事件的View的坐標(biāo)系中,前一個(gè)獲得焦點(diǎn)的矩形區(qū)域,即表示焦點(diǎn)是從哪里來的。如果不可用則為null。
       提示:
          焦點(diǎn):焦點(diǎn)描述了按鍵事件(或者是屏幕事件等)的承受者,每次按鍵事件都發(fā)生在擁有焦點(diǎn)的View上。在應(yīng)用程序中,我們可以對焦點(diǎn)進(jìn)行控制,例如從一個(gè) View移動(dòng)另一個(gè)View。下面列出一些與焦點(diǎn)有關(guān)的常用方法:
           setFocusable方法:設(shè)置View是否可以擁有焦點(diǎn)。
           isFocusable方法:監(jiān)測此View是否可以擁有焦點(diǎn)。
           setNextFocusDownId方法:設(shè)置View的焦點(diǎn)向下移動(dòng)后獲得焦點(diǎn)View的ID。
           hasFocus方法:返回了View的父控件是否獲得了焦點(diǎn)。
           requestFocus方法:嘗試讓此View獲得焦點(diǎn)。
           isFocusableTouchMode方法:設(shè)置View是否可以在觸摸模式下獲得焦點(diǎn),在默認(rèn)情況下是不可用獲得的。


    轉(zhuǎn)自http://blog.csdn.net/liranke

    posted on 2012-02-03 08:52 江天部落格 閱讀(2106) 評論(0)  編輯  收藏 所屬分類: Android

    主站蜘蛛池模板: 成人区精品一区二区不卡亚洲| 亚洲Av无码专区国产乱码DVD| 亚洲国产成人久久综合一区| 久久精品中文字幕免费| 亚洲国产一成人久久精品| 91在线视频免费观看| 中文字幕在亚洲第一在线| 一道本在线免费视频| 亚洲无线观看国产精品| 暖暖在线视频免费视频| 久久亚洲日韩精品一区二区三区| 久久国产乱子免费精品| 亚洲精品在线不卡| 日本XXX黄区免费看| 亚洲中文字幕无码爆乳| 国产又粗又猛又爽又黄的免费视频| 色九月亚洲综合网| 亚洲一级特黄无码片| 热久久这里是精品6免费观看| 亚洲成AV人片在| 国产2021精品视频免费播放| 亚洲国产无线乱码在线观看| 又粗又硬又黄又爽的免费视频 | 91精品成人免费国产片| 亚洲啪啪免费视频| 午夜高清免费在线观看| 日日躁狠狠躁狠狠爱免费视频| 在线观看亚洲精品福利片| 3344永久在线观看视频免费首页| 亚洲AV综合色区无码二区偷拍| 成人超污免费网站在线看| 国产精品无码亚洲精品2021| 亚洲宅男天堂在线观看无病毒 | 欧亚精品一区三区免费| 真人无码作爱免费视频| 亚洲AV无一区二区三区久久| 免费一本色道久久一区| 国产免费区在线观看十分钟| 亚洲精品免费在线视频| 免费大片黄手机在线观看| 99爱在线精品视频免费观看9|