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

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

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

    常用鏈接

    統(tǒng)計(jì)

    最新評(píng)論

    GestureDetector手勢(shì)識(shí)別類 (轉(zhuǎn))

    View是在onTouchEvent(MotionEvent event)里對(duì)用戶的動(dòng)作做了一定的分析,從而通知我們是發(fā)生了點(diǎn)擊還是長(zhǎng)按等事件。

    我們需要?jiǎng)?chuàng)建一個(gè)GestureDetector的對(duì)象,傳入listener對(duì)象,view接收到的onTouchEvent中將event傳給GestureDetector進(jìn)行分析listener會(huì)回調(diào)給我們相應(yīng)的動(dòng)作。其中GestureDetector.SimpleOnGestureListenerFramework幫我們簡(jiǎn)化了)是實(shí)現(xiàn)了上面提到的OnGestureListenerOnDoubleTapListener兩個(gè)接口的類,我們只需要繼承它并重寫其中我們關(guān)心的回調(diào)即可。

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

    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); 

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

        對(duì)于手勢(shì)移動(dòng)僅僅捕獲ACTION_MOVE即可,

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

       比如 distanceX > 0 向右邊移動(dòng),distanceX < 0 則向左邊,distanceY > 0 向上滾動(dòng), distanceY < 0 向下滾動(dòng)。

    */

    }


    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());

      }

    }

     


    更多的回調(diào)消息,方便的對(duì)用戶的動(dòng)作進(jìn)行響應(yīng)

    public interface OnGestureListener {

                    // Touch down時(shí)觸發(fā), edown時(shí)的MotionEvent

                    boolean onDown(MotionEvent e);

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

                    void onShowPress(MotionEvent e);

                    // Touch up時(shí)觸發(fā),eup時(shí)的MotionEvent

                    boolean onSingleTapUp(MotionEvent e);

                    // 滑動(dòng)時(shí)觸發(fā),e1down時(shí)的MotionEvente2move時(shí)的MotionEvent

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

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

                    void onLongPress(MotionEvent e);

                    // 滑動(dòng)一段距離,up時(shí)觸發(fā),e1down時(shí)的MotionEvente2up時(shí)的MotionEvent

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

    } 

    public interface OnDoubleTapListener {

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

                    boolean onSingleTapConfirmed(MotionEvent e);

                    // 第二次單擊down時(shí)觸發(fā),e為第一次down時(shí)的MotionEvent

                    boolean onDoubleTap(MotionEvent e);

                    // 第二次單擊down,moveup時(shí)都觸發(fā),e為不同時(shí)機(jī)下的MotionEvent

                    boolean onDoubleTapEvent(MotionEvent e);

    }

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


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


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 美女一级毛片免费观看| 亚洲一区二区精品视频| 最近中文字幕mv免费高清视频7| 一级毛片免费观看| 无码国产精品一区二区免费3p| 在线观看免费黄网站| 视频免费在线观看| 永久免费不卡在线观看黄网站| 国产成人AV免费观看| 十八禁在线观看视频播放免费| 你懂的网址免费国产| 中文字幕视频在线免费观看| 伊人免费在线观看高清版| 伊人久久大香线蕉免费视频| 久久这里只精品热免费99| 久久永久免费人妻精品下载| 亚洲人成免费电影| 国产乱码免费卡1卡二卡3卡| 好爽…又高潮了免费毛片| 日韩免费毛片视频| 亚洲女人被黑人巨大进入| 亚洲无线观看国产精品| 亚洲av日韩av不卡在线观看| 亚洲精品国产第1页| 四虎必出精品亚洲高清| 免费一级毛片在线播放放视频| 中国国语毛片免费观看视频| 小草在线看片免费人成视久网| 亚洲成人免费电影| 女人被免费视频网站| 日韩精品电影一区亚洲| 亚洲人成色7777在线观看| 亚洲一区二区三区电影| 亚洲五月综合缴情婷婷| 无套内射无矿码免费看黄| 中国一级全黄的免费观看| 国产国产人免费视频成69堂| 国产成人aaa在线视频免费观看 | 东方aⅴ免费观看久久av| 天天影院成人免费观看| 全免费a级毛片免费看不卡|