最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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手機抓包步驟

    Android手機抓包步驟

    這篇文章主要介紹了Android手機抓包步驟,在android網(wǎng)絡開發(fā)中這個功能還是很有必要的,下面把抓包步驟分享給大家
    2013-11-11
  • Android實現(xiàn)一個帶粘連效果的LoadingBar

    Android實現(xiàn)一個帶粘連效果的LoadingBar

    Loading效果相信大家應該都實現(xiàn)過,最近發(fā)現(xiàn)了一個不錯的效果,決定分享給大家,所以下面這篇文章主要給大家介紹了關于利用Android實現(xiàn)一個帶粘連效果的LoadingBar的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-12-12
  • Android觸摸事件如何實現(xiàn)筆觸畫布詳解

    Android觸摸事件如何實現(xiàn)筆觸畫布詳解

    這篇文章主要給大家介紹了關于Android觸摸事件如何實現(xiàn)筆觸畫布的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-10-10
  • Android 實現(xiàn)抖音頭像底部彈框效果的實例代碼

    Android 實現(xiàn)抖音頭像底部彈框效果的實例代碼

    這篇文章主要介紹了Android 實現(xiàn)抖音頭像底部彈框效果,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • Android?Studio實現(xiàn)簡單補間動畫

    Android?Studio實現(xiàn)簡單補間動畫

    這篇文章主要為大家詳細介紹了Android?Studio實現(xiàn)簡單補間動畫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Android 文件數(shù)據(jù)存儲實例詳解

    Android 文件數(shù)據(jù)存儲實例詳解

    這篇文章主要介紹了Android 文件數(shù)據(jù)存儲實例詳解的相關資料,這里附有實例代碼,幫助大家學習理解,需要的朋友可以參考下
    2016-12-12
  • android ViewPager實現(xiàn)自動無限輪播和下方向?qū)A點

    android ViewPager實現(xiàn)自動無限輪播和下方向?qū)A點

    本篇文章主要介紹了android ViewPager實現(xiàn)自動輪播和下方向?qū)A點,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • Android開發(fā)之超強圖片工具類BitmapUtil完整實例

    Android開發(fā)之超強圖片工具類BitmapUtil完整實例

    這篇文章主要介紹了Android開發(fā)之超強圖片工具類BitmapUtil,結合完整實例形式分析了Android圖片的常用操作技巧,包括圖片的加載、轉(zhuǎn)換、縮放、計算等相關操作技巧,需要的朋友可以參考下
    2017-11-11
  • Android 自定義通用的loadingview實現(xiàn)代碼

    Android 自定義通用的loadingview實現(xiàn)代碼

    本篇文章主要介紹了Android 自定義通用的loadingview實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-01-01
  • Android源碼 在Ubuntu上下載,編譯和安裝

    Android源碼 在Ubuntu上下載,編譯和安裝

    本文主要介紹在Ubuntu 上Android的源碼,想深入學習Android的朋友肯定都有學習Android的源代碼,這里就幫大家介紹下載,安裝,編譯源碼的詳細步驟
    2016-08-08

最新評論

遵义县| 文昌市| 宁河县| 柘荣县| 台州市| 循化| 水富县| 贞丰县| 扬中市| 衡水市| 定结县| 都昌县| 乃东县| 阳泉市| 清新县| 万盛区| 丰镇市| 邳州市| 盐城市| 汨罗市| 融水| 图们市| 建水县| 东兴市| 靖远县| 峨边| 宝鸡市| 吴川市| 德清县| 牙克石市| 平潭县| 南康市| 杨浦区| 津南区| 大悟县| 长宁区| 辽阳县| 沙田区| 乐安县| 个旧市| 邮箱|