中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android手勢識別器GestureDetector使用詳解

發布時間:2020-10-15 05:20:52 來源:腳本之家 閱讀:179 作者:劉洋浪子 欄目:移動開發

以前只知道控件的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用戶手勢檢測實例講解

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平遥县| 雅安市| 惠水县| 木兰县| 寿宁县| 基隆市| 五指山市| 怀集县| 浦东新区| 澄城县| 霍林郭勒市| 土默特右旗| 西林县| 奈曼旗| 东阳市| 陆河县| 色达县| 轮台县| 乌拉特后旗| 乐业县| 花垣县| 紫金县| 海口市| 丹寨县| 临湘市| 漳浦县| 乌拉特前旗| 金门县| 昌平区| 屏东市| 浠水县| 北宁市| 易门县| 鲁山县| 托克托县| 大竹县| 太仓市| 隆子县| 芜湖市| 榕江县| 哈密市|