編輯:關於Android編程
我們在進行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進行的手勢識別的資料整理,謝謝大家對本站的支持,後續繼續補充相關資料。
原型的是一種創建的設計模式,主用來創建的復雜的對象和構建耗時的實例。通過克隆已有的對象來創建的新的對象,從而節省時間和內存。原型的模式介紹原型模式的uml圖 -
Android基礎入門教程——7.6.2 基於TCP協議的Socket通信(1)標簽(空格分隔): Android基礎入門教程本節引言: 上一節的
通常修改包名時會造成R文件錯誤,並且有時帶有原因不明的Manifest文件中多處文本混亂。 所以,將目前認為最為簡潔方便的修改包名流程記錄如下: 假設我們目前的包名為co
熟悉RxAndroid的使用方法. 要點包含: (1) 鏈式表達式的使用方式. (2) Lambda的應用. (3) Rx處理網絡請求. (4) 線程自動管理, 防止內存