<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

    主站蜘蛛池模板: 亚洲理论电影在线观看| 成人免费无码大片A毛片抽搐色欲| 美女裸身网站免费看免费网站| 亚洲国产日韩在线视频| 久久久精品视频免费观看| 亚洲区小说区图片区| 一级特级aaaa毛片免费观看| 免费吃奶摸下激烈视频| 欧洲美女大片免费播放器视频| 国产精品亚洲自在线播放页码| 亚洲美女免费视频| 亚洲另类精品xxxx人妖| 国产香蕉九九久久精品免费| 亚洲免费福利在线视频| 日本一道高清不卡免费| 黄色毛片免费观看| 国产亚洲美日韩AV中文字幕无码成人 | 国产aⅴ无码专区亚洲av麻豆| 一边摸一边桶一边脱免费视频 | 羞羞视频在线观看免费| 亚洲午夜未满十八勿入网站2| 亚洲天堂中文字幕在线观看| 亚洲免费电影网站| 国产午夜亚洲精品国产| 国产成人免费网站在线观看| 一级女性全黄久久生活片免费| 亚洲午夜久久久久妓女影院| 久久久久成人精品免费播放动漫| 亚洲最大中文字幕| 日本人的色道www免费一区| 产传媒61国产免费| 久久亚洲AV成人无码| 岛国大片免费在线观看| 一区二区三区免费看| 午夜亚洲www湿好大| 成人免费网站在线观看| 一级特级aaaa毛片免费观看| 激情内射亚洲一区二区三区| 在线A级毛片无码免费真人| 亚洲免费无码在线| 亚洲午夜国产精品|