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

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

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

    常用鏈接

    統計

    最新評論

    GestureDetector手勢識別類 (轉)

    View是在onTouchEvent(MotionEvent event)里對用戶的動作做了一定的分析,從而通知我們是發生了點擊還是長按等事件。

    我們需要創建一個GestureDetector的對象,傳入listener對象,view接收到的onTouchEvent中將event傳給GestureDetector進行分析listener會回調給我們相應的動作。其中GestureDetector.SimpleOnGestureListenerFramework幫我們簡化了)是實現了上面提到的OnGestureListenerOnDoubleTapListener兩個接口的類,我們只需要繼承它并重寫其中我們關心的回調即可。

    ,那么,這個類如何使用呢?以下是使用該類的一個范例:

    private GestureDetector mGestureDetector;

    @Override

    public void onCreate(Bundle savedInstanceState) {


      super.onCreate(savedInstanceState);


      mGestureDetector = new GestureDetector(this, new MyGestureListener());


    }


    @Override

    public boolean onTouchEvent(MotionEvent event) {

     return mGestureDetector.onTouchEvent(event); 

    /*  有關上面的 onTouchEvent方法,我們可以直接判斷MotionEvent的類型,

        對于手勢移動僅僅捕獲ACTION_MOVE即可,

        我們通過參數MotionEvent e1, MotionEvent e2,float distanceX, float distanceY可以獲取操作變化。

       比如 distanceX > 0 向右邊移動,distanceX < 0 則向左邊,distanceY > 0 向上滾動, distanceY < 0 向下滾動。

    */

    }


    class MyGestureListener extends GestureDetector.SimpleOnGestureListener{

      @Override

      public boolean onSingleTapUp(MotionEvent ev) {

        Log.d("onSingleTapUp",ev.toString());

        return true;

      }


      @Override

      public void onShowPress(MotionEvent ev) {

        Log.d("onShowPress",ev.toString());

      }


      @Override

      public void onLongPress(MotionEvent ev) {

        Log.d("onLongPress",ev.toString());

      }

    }

     


    更多的回調消息,方便的對用戶的動作進行響應

    public interface OnGestureListener {

                    // Touch down時觸發, edown時的MotionEvent

                    boolean onDown(MotionEvent e);

                    // Touch down之后一定時間(115ms)觸發,edown時的MotionEvent

                    void onShowPress(MotionEvent e);

                    // Touch up時觸發,eup時的MotionEvent

                    boolean onSingleTapUp(MotionEvent e);

                    // 滑動時觸發,e1down時的MotionEvente2move時的MotionEvent

                    boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY);

                    // Touch down之后一定時間(500ms)觸發,edown時的MotionEvent

                    void onLongPress(MotionEvent e);

                    // 滑動一段距離,up時觸發,e1down時的MotionEvente2up時的MotionEvent

                    boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY);

    } 

    public interface OnDoubleTapListener {

                    // 完成一次單擊,并確定沒有二擊事件后觸發(300ms),edown時的MotionEvent

                    boolean onSingleTapConfirmed(MotionEvent e);

                    // 第二次單擊down時觸發,e為第一次down時的MotionEvent

                    boolean onDoubleTap(MotionEvent e);

                    // 第二次單擊down,moveup時都觸發,e為不同時機下的MotionEvent

                    boolean onDoubleTapEvent(MotionEvent e);

    }

    boolean  onDoubleTap(MotionEvent e)
    解釋:雙擊的第二下Touch down時觸發
    boolean  onDoubleTapEvent(MotionEvent e)
    解釋:雙擊的第二下Touch down和up都會觸發,可用e.getAction()區分。
    boolean  onDown(MotionEvent e)
    解釋:Touch down時觸發
    boolean  onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
    解釋:Touch了滑動一點距離后,up時觸發。
    void  onLongPress(MotionEvent e)
    解釋:Touch了不移動一直Touch down時觸發
    boolean  onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
    解釋:Touch了滑動時觸發。
    void  onShowPress(MotionEvent e)
    解釋:Touch了還沒有滑動時觸發
    (與onDown,onLongPress比較,onDown只要Touch down一定立刻觸發。而Touchdown后過一會沒有滑動先觸發onShowPress再是onLongPress。
    所以Touchdown后一直不滑動,onDown->onShowPress->onLongPress這個順序觸發。
    boolean  onSingleTapConfirmed(MotionEvent e)
    boolean  onSingleTapUp(MotionEvent e)
    解釋:上面這兩個函數都是在touch down后又沒有滑動(onScroll),又沒有長按(onLongPress),然后Touchup時觸發。
    點擊一下非常快的(不滑動)Touchup:
    onDown->onSingleTapUp->onSingleTapConfirmed
    點擊一下稍微慢點的(不滑動)Touchup:
    onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed


    posted on 2011-02-16 15:03 九寶 閱讀(542) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲人6666成人观看| 久久水蜜桃亚洲AV无码精品| 国产成人午夜精品免费视频| 亚洲色大成网站www久久九 | 在线日韩日本国产亚洲| 亚洲一区免费观看| 亚洲sm另类一区二区三区| 亚洲深深色噜噜狠狠爱网站| 99久久这里只精品国产免费| 久青草国产免费观看| 亚洲中文字幕无码av在线| 亚洲午夜日韩高清一区| 亚洲成在人线aⅴ免费毛片| 一区二区3区免费视频| 亚洲AV无码专区在线亚| 国产L精品国产亚洲区久久| 国产成人午夜精品免费视频| 韩日电影在线播放免费版| 亚洲乱码日产精品一二三| 亚洲av无码无在线观看红杏| 国外成人免费高清激情视频| 欧洲精品99毛片免费高清观看| 免费在线观看亚洲| 亚洲综合免费视频| 亚洲色自偷自拍另类小说| 国产成人精品123区免费视频| 91精品国产免费| 中文字幕免费在线播放| 亚洲精品国产精品| 亚洲最新在线视频| 亚洲产国偷V产偷V自拍色戒| 国产伦精品一区二区三区免费下载 | 永久免费精品影视网站| 中文有码亚洲制服av片| 中文字幕亚洲精品| 亚洲精品乱码久久久久久中文字幕| 国产91久久久久久久免费| 一个人看www在线高清免费看| 无码国产精品一区二区免费vr| 成人毛片100免费观看| 免费激情网站国产高清第一页|