Android GestureDetector手勢識別類
http://blog.csdn.net/aben_2005/article/details/6417423
為了加強滑鼠響應事件,Android提供了GestureDetector手勢識別類。通過GestureDetector.OnGestureListener來獲取當前被觸發的操作手勢(Single Tap Up、Show Press、Long Press、Scroll、Down、Fling),具體包括以下幾種:
boolean onDoubleTap(MotionEvent e)
解釋:雙擊的第二下Touch down時觸發
boolean onDoubleTapEvent(MotionEvent e)
解釋:雙擊的第二下Touch down和up都會觸發,可用e.getAction()區分。
boolean onDown(MotionEvent e)
解釋:Touch down時觸發
boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
解釋:Touch了滑動一點距離後,up時觸發。
void onLongPress(MotionEvent e)
解釋:Touch了不移動一直Touch down時觸發
boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
解釋:Touch了滑動時觸發。
void onShowPress(MotionEvent e)
解釋:Touch了還沒有滑動時觸發
(與onDown,onLongPress比較
onDown只要Touch down一定立刻觸發。
而Touchdown後過一會沒有滑動先觸發onShowPress再是onLongPress。
所以Touchdown後一直不滑動,onDown->onShowPress->onLongPress這個順序觸發。
boolean onSingleTapConfirmed(MotionEvent e)
boolean onSingleTapUp(MotionEvent e)
解釋:上面這兩個函式都是在touch down後又沒有滑動(onScroll),又沒有長按(onLongPress),然後Touchup時觸發。
點選一下非常快的(不滑動)Touchup:
onDown->onSingleTapUp->onSingleTapConfirmed
點選一下稍微慢點的(不滑動)Touchup:
onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed
使用GestureDetector需要在View中重寫onTouchEvent事件,例如:
- GestureDetector mGesture = null;
- @Override
- public boolean onTouch(View v, MotionEvent event)
- {
- // TODO Auto-generated method stub
- return mGesture.onTouchEvent(event);
- }
詳細的測試例子如下:
- package com.jiubang.android.gesturetest;
- import android.app.Activity;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.GestureDetector;
- import android.view.MotionEvent;
- import android.view.View;
- import android.view.GestureDetector.SimpleOnGestureListener;
- import android.view.View.OnTouchListener;
- import android.widget.Button;
- public class GestureActivity extends Activity
- implements OnTouchListener
- {
- private Button mButton = null;
- GestureDetector mGesture = null;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- Log.i("TEST", "onCreate");
- mButton = (Button)findViewById(R.id.button1);
- mButton.setOnTouchListener(this);
- mGesture = new GestureDetector(this, new GestureListener());
- }
- @Override
- public boolean onTouch(View v, MotionEvent event)
- {
- // TODO Auto-generated method stub
- return mGesture.onTouchEvent(event);
- }
- class GestureListener extends SimpleOnGestureListener
- {
- @Override
- public boolean onDoubleTap(MotionEvent e)
- {
- // TODO Auto-generated method stub
- Log.i("TEST", "onDoubleTap");
- return super.onDoubleTap(e);
- }
- @Override
- public boolean onDown(MotionEvent e)
- {
- // TODO Auto-generated method stub
- Log.i("TEST", "onDown");
- return super.onDown(e);
- }
- @Override
- public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
- float velocityY)
- {
- // TODO Auto-generated method stub
- Log.i("TEST", "onFling:velocityX = " + velocityX + " velocityY" + velocityY);
- return super.onFling(e1, e2, velocityX, velocityY);
- }
- @Override
- public void onLongPress(MotionEvent e)
- {
- // TODO Auto-generated method stub
- Log.i("TEST", "onLongPress");
- super.onLongPress(e);
- }
- @Override
- public boolean onScroll(MotionEvent e1, MotionEvent e2,
- float distanceX, float distanceY)
- {
- // TODO Auto-generated method stub
- Log.i("TEST", "onScroll:distanceX = " + distanceX + " distanceY = " + distanceY);
- return super.onScroll(e1, e2, distanceX, distanceY);
- }
- @Override
- public boolean onSingleTapUp(MotionEvent e)
- {
- // TODO Auto-generated method stub
- Log.i("TEST", "onSingleTapUp");
- return super.onSingleTapUp(e);
- }
- }
- }
//以上部分內容選自網路
相關文章
- android開發之GestureDetector手勢識別(調節音量、亮度、快進和後退)Android
- Flutter基礎-035-GestureDetector手勢識Flutter
- android 多手勢識別Android
- Flutter基礎(八)手勢相關Widget:GestureDetector和DismissibleFlutter
- Flutter 基礎(八)手勢相關 Widget:GestureDetector 和 DismissibleFlutter
- 人臉識別和手勢識別應用(face++)開發
- 自定義viewgroup(5)--可滾動佈局,GestureDetector手勢監聽View
- 基於OPENCV的手勢識別技術OpenCV
- iOS學習筆記06 手勢識別iOS筆記
- iOS手勢識別的詳細使用(拖動,縮放,旋轉,點選,手勢依賴,自定義手勢)iOS
- iOS手勢識別的詳細使用:拖動、縮放、旋轉、點選、手勢依賴、自定義手勢iOS
- AR手勢識別互動,讓應用更加“得心應手”
- 谷歌推出基於AI的開源手勢識別演算法,可識別單手21個骨骼點谷歌AI演算法
- 手勢識別中一些錯誤解決方法
- Rokid釋出AR眼鏡新品 支援人臉識別手勢識別等功能
- Android 手勢檢測Android
- iOS開發學習之觸控事件和手勢識別iOS事件
- ReactNative之手勢識別React
- android 滾動手勢動畫Android動畫
- Android 手勢相關(一)Android
- Android 手勢相關(二)Android
- android 檢測常用的手勢Android
- android 追蹤手勢移動Android
- 手語也能機器翻譯了!機器學習手勢識別功能瞭解一下機器學習
- 手寫識別 b友
- Android開發 - UUID 類通用唯一識別符號解析AndroidUI符號
- 開源姿勢識別軟體
- iOS開發系列--觸控事件、手勢識別、搖晃事件、耳機線控iOS事件
- 照片解鎖了40%具有面部識別功能的Android手機Android
- 分析建模-如何識別分析類?
- js自定義Android端手勢事件JSAndroid事件
- Android Gesture 手勢建立以及使用示例Android
- 高階實用又安全 各類識別技術手機推薦
- 【機器學習】手寫數字識別機器學習
- Android 唯一識別碼Android
- android 處理多點觸控手勢Android
- 基於深度學習的手勢識別系統(Python程式碼,UI介面版)深度學習PythonUI
- win10系統不能識別Android手機MTP模式如何解決Win10Android模式