自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Android游戲開發(fā)之十一:View中如何進(jìn)行手勢識別

移動開發(fā) Android 游戲開發(fā)
我們在進(jìn)行Android游戲開發(fā)時會用到很多種控制,包括前面講到的按鍵和軌跡球控制方式,除此之外還有手勢操作、重力感應(yīng)等多種控制方式需要了解掌握。本節(jié)主要為大家講解在View中如何進(jìn)行手勢識別。

很多網(wǎng)友發(fā)現(xiàn)Android中手勢識別提供了兩個類,由于Android 1.6以下的版本比如cupcake中無法使用android.view.GestureDetector,而 android.gesture.Gesture是Android 1.6開始支持的,考慮到仍然有使用Android 1.5固件的網(wǎng)友,就來看下兼容性更強(qiáng)的android.view.GestureDetector。在 android.view.GestureDetector類中有很多種重載版本,下面我們僅提到能夠自定義在View中的兩種方法,分別為 GestureDetector(Context context, GestureDetector.OnGestureListener listener) 和GestureDetector(Context context, GestureDetector.OnGestureListener listener, Handler handler) 。我們可以看到***個參數(shù)為Context,所以我們想附著到某View時,最簡單的方法就是直接從超類派生傳遞Context,實(shí)現(xiàn) GestureDetector里中提供一些接口。

下面我們就以實(shí)現(xiàn)手勢識別的onFling動作,在CwjView中我們從View類繼承,當(dāng)然大家可以從TextView等更高層的界面中實(shí)現(xiàn)觸控。

  1. class CwjView extends View {    
  2.     private GestureDetector mGD;    
  3.     public CwjView(Context context, AttributeSet attrs) {    
  4.         super(context, attrs);    
  5.         mGD = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {    
  6.                 public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {    
  7.                     int dx = (int) (e2.getX() - e1.getX()); //計算滑動的距離    
  8.                     if (Math.abs(dx) > MAJOR_MOVE && Math.abs(velocityX) > Math.abs(velocityY)) { //降噪處理,必須有較大的動作才識別    
  9.                         if (velocityX > 0) {    
  10.                            //向右邊    
  11.    
  12.                         } else {    
  13.                             //向左邊    
  14.                         }    
  15.                         return true;    
  16.                     } else {    
  17.                         return false;  //當(dāng)然可以處理velocityY處理向上和向下的動作    
  18.                     }    
  19.                 }    
  20.             });    
  21.     }    
  22.   /*提示大家上面僅僅探測了Fling動作僅僅實(shí)現(xiàn)了onFling方法,這里相關(guān)的還有以下幾種方法來實(shí)現(xiàn)具體的可以參考我們以前的文章有詳細(xì)的解釋:   
  23.  boolean  onDoubleTap(MotionEvent e)    
  24.  boolean  onDoubleTapEvent(MotionEvent e)    
  25.  boolean  onDown(MotionEvent e)    
  26.  void  onLongPress(MotionEvent e)    
  27.  boolean  onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)    
  28.  void  onShowPress(MotionEvent e)    
  29.  boolean  onSingleTapConfirmed(MotionEvent e)    
  30.  boolean  onSingleTapUp(MotionEvent e)    
  31.  */   
  32.    //接下來是重點(diǎn),讓我們的View接受觸控,需要使用下面兩個方法讓GestureDetector類去處理onTouchEvent和onInterceptTouchEvent方法。    
  33.     @Override   
  34.     public boolean onTouchEvent(MotionEvent event) {      
  35.         mGD.onTouchEvent(event);    
  36.         return true;    
  37.     }    
  38.     @Override   
  39.     public boolean onInterceptTouchEvent(MotionEvent event) {    
  40.         return mGD.onTouchEvent(event);    
  41.     }    
  42. }   

本節(jié)關(guān)于View中手勢識別的內(nèi)容就講這些。大家知道,很多Android設(shè)備都提供了重力感應(yīng)器和加速度感應(yīng)器,而稍好些的設(shè)備還具備陀螺儀感應(yīng)器,提供測試角速度功能。下一節(jié)將為大家講解重力感應(yīng)知識。

責(zé)任編輯:閆佳明 來源: jizhuomi
相關(guān)推薦

2024-07-08 08:38:37

Python游戲開發(fā)

2023-12-11 08:25:15

Java框架Android

2010-02-06 14:52:53

Android平臺

2010-02-01 14:48:43

2013-05-20 17:33:44

Android游戲開發(fā)自定義View

2022-05-17 12:25:59

物聯(lián)網(wǎng)智能建筑樓宇自控

2011-09-02 14:37:32

UbuntuAndroid

2010-02-05 16:35:35

Android操作系統(tǒng)

2010-03-03 15:06:52

Android 游戲開

2018-04-18 08:57:59

AndroidiOS移動系統(tǒng)

2017-09-08 13:30:32

深度學(xué)習(xí)圖像識別卷積神經(jīng)網(wǎng)絡(luò)

2010-02-04 17:42:15

Android數(shù)據(jù)庫

2013-01-05 10:16:26

需求開發(fā)

2021-05-17 14:02:38

Swift 多重排序

2013-05-20 17:07:26

2021-12-01 15:52:56

安全開發(fā)測試

2010-06-12 15:41:28

UML建模

2013-05-21 13:33:02

Android游戲開發(fā)異步音樂播放

2011-08-22 12:05:50

Linux

2013-02-21 10:32:29

Win Server 災(zāi)難恢復(fù)虛擬機(jī)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號