Android View進行手勢識別詳解_Android

來源:互聯網
上載者:User

       我們在進行Android遊戲開發時會用到很多種控制,包括前面講到的按鍵和軌跡球控制方式,除此之外還有手勢操作、重力感應等多種控制方式需要瞭解掌握。本節主要為大家講解在View中如何進行手勢識別。

       很多網友發現Android中手勢識別提供了兩個類,由於Android 1.6以下的版本比如cupcake中無法使用android.view.GestureDetector,而android.gesture.Gesture是Android 1.6開始支援的,考慮到仍然有使用Android 1.5韌體的網友,就來看下相容性更強的android.view.GestureDetector。在android.view.GestureDetector類中有很多種重載版本,下面我們僅提到能夠自訂在View中的兩種方法,分別為GestureDetector(Context context, GestureDetector.OnGestureListener listener) 和GestureDetector(Context context, GestureDetector.OnGestureListener listener, Handler handler) 。我們可以看到第一個參數為Context,所以我們想附著到某View時,最簡單的方法就是直接從超類派生傳遞Context,實現GestureDetector裡中提供一些介面。

       下面我們就以實現手勢識別的onFling動作,在CwjView中我們從View類繼承,當然大家可以從TextView等更高層的介面中實現觸控。

Java代碼

class CwjView extends View {     private GestureDetector mGD;    public CwjView(Context context, AttributeSet attrs) {      super(context, attrs);           mGD = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {          public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {            int dx = (int) (e2.getX() - e1.getX()); //計算滑動的距離             if (Math.abs(dx) > MAJOR_MOVE && Math.abs(velocityX) > Math.abs(velocityY)) { //降噪處理,必須有較大的動作才識別              if (velocityX > 0) {                //向右邊               } else {                //向左邊               }              return true;            } else {              return false; //當然可以處理velocityY處理向上和向下的動作            }          }        });    }    /*提示大家上面僅僅探測了Fling動作僅僅實現了onFling方法,這裡相關的還有以下幾種方法來實現具體的可以參考我們以前的文章有詳細的解釋:   boolean onDoubleTap(MotionEvent e)   boolean onDoubleTapEvent(MotionEvent e)   boolean onDown(MotionEvent e)   void onLongPress(MotionEvent e)   boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)   void onShowPress(MotionEvent e)   boolean onSingleTapConfirmed(MotionEvent e)   boolean onSingleTapUp(MotionEvent e)   */    //接下來是重點,讓我們的View接受觸控,需要使用下面兩個方法讓GestureDetector類去處理onTouchEvent和onInterceptTouchEvent方法。     @Override   public boolean onTouchEvent(MotionEvent event) {       mGD.onTouchEvent(event);      return true;    }     @Override   public boolean onInterceptTouchEvent(MotionEvent event) {      return mGD.onTouchEvent(event);    }   } 

       本節關於View中手勢識別的內容就講這些。大家知道,很多Android裝置都提供了重力感應器和加速度感應器,而稍好些的裝置還具備陀螺儀感應器,提供測試角速度功能。下一節將為大家講解重力感應知識。

       以上就是對Android View進行的手勢識別的資料整理,謝謝大家對本站的支援,後續繼續補充相關資料。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.