亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android觸摸及手勢操作GestureDetector

 更新時間:2016年07月28日 16:13:46   作者:xyz_lmn  
這篇文章主要a為大家詳細介紹了Android觸摸及手勢操作GestureDetector的相關資料,感興趣的小伙伴們可以參考一下

現(xiàn)在的智能手機不敢說百分百的都是觸摸屏,也應該是百分之九九以上為觸摸屏了,觸摸屏為我們操作無鍵盤、無鼠標的手機系統(tǒng)帶來了很多的便利。當用戶觸摸屏幕時會產(chǎn)生很多的觸摸事件,down、up、move等等。View類有個View.OnTouchListener內(nèi)部接口,通過重寫他的onTouch(View v, MotionEvent event)方法,我們可以處理一些touch事件,如下:

public class MainActivity extends Activity {
...
// This example shows an Activity, but you would use the same approach if
// you were subclassing a View.
@Override
public boolean onTouchEvent(MotionEvent event){ 
  
 int action = MotionEventCompat.getActionMasked(event);
  
 switch(action) {
  case (MotionEvent.ACTION_DOWN) :
   Log.d(DEBUG_TAG,"Action was DOWN");
   return true;
  case (MotionEvent.ACTION_MOVE) :
   Log.d(DEBUG_TAG,"Action was MOVE");
   return true;
  case (MotionEvent.ACTION_UP) :
   Log.d(DEBUG_TAG,"Action was UP");
   return true;
  case (MotionEvent.ACTION_CANCEL) :
   Log.d(DEBUG_TAG,"Action was CANCEL");
   return true;
  case (MotionEvent.ACTION_OUTSIDE) :
   Log.d(DEBUG_TAG,"Movement occurred outside bounds " +
     "of current screen element");
   return true;  
  default : 
   return super.onTouchEvent(event);
 }  
}

OnTouch提供的事件還是相對較簡單,如果需要處理一些復雜的手勢,用這個接口就會很麻煩,因為我們要根據(jù)用戶觸摸的軌跡去判斷是什么手勢。Android sdk給我們提供了GestureDetector(Gesture:手勢Detector:識別)類,通過這個類我們可以識別很多的手勢。

public class GestureDetector extends Object 
java.lang.Object
android.view.GestureDetector

GestureDetector屬于android.view包,android還提供了android.gesture包支持更多的手勢操作,以后我們會介紹到。官方的介紹中使用了GestureDetectorCompat處理手勢識別,為什么使用GestureDetectorCompat替換了GestureDetector呢,官方的是這樣解釋的:

 GestureDetectorCompat實例化有下面兩種方法:

   

GestureDetector類對外提供了兩個接口:OnGestureListener,OnDoubleTapListener,還有一個內(nèi)部類SimpleOnGestureListener;SimpleOnGestureListener類是GestureDetector提供給我們的一個更方便的響應不同手勢的類,它實現(xiàn)了上述兩個接口,該類是static class,也就是說它實際上是一個外部類,我們可以在外部繼承這個類,重寫里面的手勢處理方法。因此實現(xiàn)手勢識別有兩種方法,一種實現(xiàn)OnGestureListener接口,另一種是使用SimpleOnGestureListener類。

OnGestureListener有下面的幾個動作:

按下(onDown): 剛剛手指接觸到觸摸屏的那一剎那,就是觸的那一下。

拋擲(onFling): 手指在觸摸屏上迅速移動,并松開的動作。

長按(onLongPress): 手指按在持續(xù)一段時間,并且沒有松開。

滾動(onScroll): 手指在觸摸屏上滑動。

按住(onShowPress): 手指按在觸摸屏上,它的時間范圍在按下起效,在長按之前。

抬起(onSingleTapUp):手指離開觸摸屏的那一剎那。

使用OnGestureListener接口,這樣需要重載OnGestureListener接口所有的方法,適合監(jiān)聽所有的手勢,正如官方文檔提到的“Detecing All Supported Gestures”。

public class MainActivity extends Activity implements 
  GestureDetector.OnGestureListener,
  GestureDetector.OnDoubleTapListener{
 
 private static final String DEBUG_TAG = "Gestures";
 private GestureDetectorCompat mDetector; 

 // Called when the activity is first created. 
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  // Instantiate the gesture detector with the
  // application context and an implementation of
  // GestureDetector.OnGestureListener
  mDetector = new GestureDetectorCompat(this,this);
  // Set the gesture detector as the double tap
  // listener.
  mDetector.setOnDoubleTapListener(this);
 }

 @Override 
 public boolean onTouchEvent(MotionEvent event){ 
  this.mDetector.onTouchEvent(event);
  // Be sure to call the superclass implementation
  return super.onTouchEvent(event);
 }

 @Override
 public boolean onDown(MotionEvent event) { 
  Log.d(DEBUG_TAG,"onDown: " + event.toString()); 
  return true;
 }

 @Override
 public boolean onFling(MotionEvent event1, MotionEvent event2, 
   float velocityX, float velocityY) {
  Log.d(DEBUG_TAG, "onFling: " + event1.toString()+event2.toString());
  return true;
 }

 @Override
 public void onLongPress(MotionEvent event) {
  Log.d(DEBUG_TAG, "onLongPress: " + event.toString()); 
 }

 @Override
 public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
   float distanceY) {
  Log.d(DEBUG_TAG, "onScroll: " + e1.toString()+e2.toString());
  return true;
 }

 @Override
 public void onShowPress(MotionEvent event) {
  Log.d(DEBUG_TAG, "onShowPress: " + event.toString());
 }

 @Override
 public boolean onSingleTapUp(MotionEvent event) {
  Log.d(DEBUG_TAG, "onSingleTapUp: " + event.toString());
  return true;
 }

 @Override
 public boolean onDoubleTap(MotionEvent event) {
  Log.d(DEBUG_TAG, "onDoubleTap: " + event.toString());
  return true;
 }

 @Override
 public boolean onDoubleTapEvent(MotionEvent event) {
  Log.d(DEBUG_TAG, "onDoubleTapEvent: " + event.toString());
  return true;
 }

 @Override
 public boolean onSingleTapConfirmed(MotionEvent event) {
  Log.d(DEBUG_TAG, "onSingleTapConfirmed: " + event.toString());
  return true;
 }
}

 這樣會造成有些手勢動作我們用不到,但是還要重載。SimpleOnGestureListener類的出現(xiàn)為我們解決了這個問題,如果你想“Detecting a Subset of Supported Gestures”,SimpleOnGestureListener是最好的選擇。

public class MainActivity extends Activity { 
 
 private GestureDetectorCompat mDetector; 

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  mDetector = new GestureDetectorCompat(this, new MyGestureListener());
 }

 @Override 
 public boolean onTouchEvent(MotionEvent event){ 
  this.mDetector.onTouchEvent(event);
  return super.onTouchEvent(event);
 }
 
 class MyGestureListener extends GestureDetector.SimpleOnGestureListener {
  private static final String DEBUG_TAG = "Gestures"; 
  
  @Override
  public boolean onDown(MotionEvent event) { 
   Log.d(DEBUG_TAG,"onDown: " + event.toString()); 
   return true;
  }

  @Override
  public boolean onFling(MotionEvent event1, MotionEvent event2, 
    float velocityX, float velocityY) {
   Log.d(DEBUG_TAG, "onFling: " + event1.toString()+event2.toString());
   return true;
  }
 }
}

最后了我們也解釋兩個問題:

1、onTouchEvent中為什么使用了MotionEventCompat,而不直接使用MotionEvent。因為MotionEventCompat使更多的Action適配到API 4。

2、Android的view怎么使用手勢,方法如下:

View myView = findViewById(R.id.my_view); 
  myView.setOnTouchListener(new OnTouchListener() {
   public boolean onTouch(View v, MotionEvent event) {
    // ... Respond to touch events  
   this.mDetector.onTouchEvent(event);
    return super.onTouchEvent(event);
   }
  });

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Android ViewPager加載圖片效果

    Android ViewPager加載圖片效果

    這篇文章主要為大家詳細介紹了Android ViewPager加載圖片效果的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Android圖片壓縮(質(zhì)量壓縮和尺寸壓縮)

    Android圖片壓縮(質(zhì)量壓縮和尺寸壓縮)

    本篇文章主要介紹介紹了Android圖片壓縮(質(zhì)量壓縮和尺寸壓縮),具有一定的參考價值,有興趣的可以了解一下。
    2017-01-01
  • 利用源碼編譯Android系統(tǒng)的APK和可執(zhí)行命令的方法

    利用源碼編譯Android系統(tǒng)的APK和可執(zhí)行命令的方法

    這篇文章主要介紹了利用源碼編譯Android系統(tǒng)的APK和可執(zhí)行命令的方法,示例在Linux系統(tǒng)環(huán)境上進行構建,需要的朋友可以參考下
    2016-02-02
  • 六款值得推薦的android(安卓)開源框架簡介

    六款值得推薦的android(安卓)開源框架簡介

    同事整理的android(安卓)開源框架,個個都堪稱經(jīng)典。32 個贊!
    2014-06-06
  • Android中實現(xiàn)監(jiān)聽ScrollView滑動事件

    Android中實現(xiàn)監(jiān)聽ScrollView滑動事件

    這篇文章主要介紹了Android中實現(xiàn)監(jiān)聽ScrollView滑動事件,本文用重寫ScrollView類的方法實現(xiàn)了一些擴展功能,需要的朋友可以參考下
    2015-05-05
  • Android實現(xiàn)照片墻效果的實例代碼

    Android實現(xiàn)照片墻效果的實例代碼

    Android實現(xiàn)照片墻效果的設計思路其實也非常簡單,用一個GridView控件當作“墻”,然后隨著GridView的滾動將一張張照片貼在“墻”上,這些照片可以是手機本地中存儲的,也可以是從網(wǎng)上下載的
    2018-05-05
  • Android切圓角的幾種常見方式總結

    Android切圓角的幾種常見方式總結

    這篇文章主要給大家介紹了關于Android切圓角的常見方式,文中通過示例代碼介紹的非常詳細,對各位Android開發(fā)者們具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-12-12
  • Android錄制按鈕源碼解析

    Android錄制按鈕源碼解析

    這篇文章主要為大家詳細解析了Android錄制按鈕源碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Android忽略文件實例代碼

    Android忽略文件實例代碼

    這篇文章主要介紹了Android忽略文件的實例代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2018-02-02
  • 移動端使用CSS或JS判斷橫屏和豎屏的講解

    移動端使用CSS或JS判斷橫屏和豎屏的講解

    今天小編就為大家分享一篇關于移動端使用CSS或JS判斷橫屏和豎屏的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03

最新評論