国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android手勢識別器GestureDetector使用詳解

2019-12-12 03:28:18
字體:
來源:轉載
供稿:網友

以前只知道控件的onTouchEvent()事件,它的動作有MotionEvent.ACTION_DOWN、MotionEvent.ACTION_MOVE、MotionEvent.ACTION_UP;今天有個需求,要監聽控件的雙擊、拖動、滑動等事件,這時onTouchEvent()很明顯不能滿足我們的需求,經多方打聽,找到了今天的主角GestureDetector,下面就對它進行簡單的學習。

構造方法:

已過時的有2個,不推薦使用。

GestureDetector(GestureDetector.onGestureListener listener);

GestureDetector(GestureDetector.onGestureListener listener,Handler handler);

推薦使用。

 GestureDeterctor(Context context,GestureDetector.onGestureListener listener);

 GestureDeterctor(Context context,GestureDetector.onGestureListener listener,Handler handler);

 GestureDeterctor(Context context,GestureDetector.onGestureListener listener,Handler handler,boolean unused);

參數handler主要用來執行延時操作時使用,參數unused暫時沒有使用。

從構成函數可以看出,當我們需要創建一個GestureDetector對象時,必須給它傳一個GestureDetector.onGestureListener對象,查看API之后,發現它是個接口(interface),創建GestureDetector.onGestureListener的對象時,必須實現一下幾個方法:

1、onDown(MotionEvent e);

      當用戶按下時的回調。

2、onFling(MotionEvent e1,MontionEvent e2,float velocityX,float velocityY);

      當用戶快速拖動,并離開屏幕時,控件還在滑動的回調。

3、onLongPress(MotionEvent e);

      當用戶長按控件時的回調。

4、onScroll(MotionEvent e1,MotionEvent e2,float distanceX,float distanceY);

      當用戶拖著控件(控件本身并沒有動)滑動時的回調。

5、onShowPress(MotionEvent e);

      當用戶按下,還沒有執行移動或者抬起的動作的回調。

6、onSingleTapUp(MotionEvent e);

      用戶按下,立即抬起,沒有做其它動作時的回調。

有了這個監聽之后,我們還可以給GestureDetector設置雙擊監聽,使用的方法是:

mGestureDetector.setOnDoubleTapListener(GestureDetector.OnDoubleTapListener onDoubleListener);

參數是雙擊監聽的對象,GestureDetector.OnDoubleTapListener它也是一個接口(interface),創建它的對象時,也必須實現以下幾個方法。

1、onDoubleTap(MotionEvent e);

      當用戶雙擊時回調。

2、onDoubleTapEvent(MotionEvent e);

      雙擊間隔事件的回調。

3、onSingleTapConfirmed(MotionEvent e);

      當用戶單擊時回調。

上面的兩個監聽,回調函數都是必須實現,有時候我們不需要監聽所有的事件,只對自己感興趣的事件進行監聽,GestureDetector有個內部類幫我們實現此功能GestureDetector.SimpleOnGestureListener,該類實現了GestureDetector.onGestureListener、GestureDetector.onDoubleTapListener、GestureDetector.onContextClickListener這三個接口,并實現了它們的方法,只不過是空實現,在我們需要這三個接口的時候,我們可以創建GestureDetector.SimpleOnGestureListener對象,然后需要監聽哪個事件,我們就重寫它的哪個方法,下面我把它的所有方法都實現了,其實和上邊兩個接口實現的方法是一樣。

GestureDetector.SimpleOnGestureListener mGestureDetector = new SimpleOnGestureListener(){     @Override    public boolean onSingleTapUp(MotionEvent e) {     return super.onSingleTapUp(e);    }     @Override    public void onLongPress(MotionEvent e) {     super.onLongPress(e);    }     @Override    public boolean onScroll(MotionEvent e1, MotionEvent e2,      float distanceX, float distanceY) {     return super.onScroll(e1, e2, distanceX, distanceY);    }     @Override    public boolean onFling(MotionEvent e1, MotionEvent e2,      float velocityX, float velocityY) {     return super.onFling(e1, e2, velocityX, velocityY);    }     @Override    public void onShowPress(MotionEvent e) {     super.onShowPress(e);    }     @Override    public boolean onDown(MotionEvent e) {     return super.onDown(e);    }     @Override    public boolean onDoubleTap(MotionEvent e) {     return super.onDoubleTap(e);    }     @Override    public boolean onDoubleTapEvent(MotionEvent e) {     return super.onDoubleTapEvent(e);    }     @Override    public boolean onSingleTapConfirmed(MotionEvent e) {     return super.onSingleTapConfirmed(e);    }       }; 

只有理論沒有實踐,怎么行呢?這里我也寫了一個Demo,這個Demo是我從另一篇博客中抄的,文章的內容也是參考他的博客寫的,下面會把大神的那篇博客地址貼出來。

參考資料:Android GestureDetector用戶手勢檢測實例講解

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 太仆寺旗| 敖汉旗| 永州市| 拜城县| 县级市| 株洲市| 呼伦贝尔市| 云霄县| 嘉禾县| 修水县| 安徽省| 奉化市| 库尔勒市| 庆城县| 高台县| 西藏| 吉安县| 汪清县| 安多县| 汾阳市| 富民县| 灵石县| 台州市| 洮南市| 南康市| 双鸭山市| 云霄县| 大同县| 普陀区| 江门市| 汶上县| 连城县| 阿拉善左旗| 淄博市| 霍邱县| 白朗县| 清涧县| 商洛市| 申扎县| 金乡县| 东阳市|