zoukankan      html  css  js  c++  java
  • Android 手势识别类 ( 一 ) GestureDetector 基本介绍

    为了加强鼠标响应事件,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事件,例如:

    1. GestureDetector mGesture = null;  
    2. @Override  
    3.     public boolean onTouch(View v, MotionEvent event)  
    4.     {  
    5.         // TODO Auto-generated method stub  
    6.         return mGesture.onTouchEvent(event);  
    7.     }  

     详细的测试例子如下:

    1. package com.jiubang.android.gesturetest;  
    2.   
    3. import android.app.Activity;  
    4. import android.os.Bundle;  
    5. import android.util.Log;  
    6. import android.view.GestureDetector;  
    7. import android.view.MotionEvent;  
    8. import android.view.View;  
    9. import android.view.GestureDetector.SimpleOnGestureListener;  
    10. import android.view.View.OnTouchListener;  
    11. import android.widget.Button;  
    12.   
    13. public class GestureActivity extends Activity  
    14.             implements OnTouchListener  
    15. {  
    16.     private Button mButton = null;  
    17.     GestureDetector mGesture = null;  
    18.       
    19.     /** Called when the activity is first created. */  
    20.     @Override  
    21.     public void onCreate(Bundle savedInstanceState) {  
    22.         super.onCreate(savedInstanceState);  
    23.         setContentView(R.layout.main);  
    24.           
    25.         Log.i("TEST", "onCreate");  
    26.         mButton = (Button)findViewById(R.id.button1);  
    27.         mButton.setOnTouchListener(this);  
    28.         mGesture = new GestureDetector(this, new GestureListener());  
    29.     }  
    30.   
    31.     @Override  
    32.     public boolean onTouch(View v, MotionEvent event)  
    33.     {  
    34.         // TODO Auto-generated method stub  
    35.         return mGesture.onTouchEvent(event);  
    36.     }  
    37.       
    38.     class GestureListener extends SimpleOnGestureListener  
    39.     {  
    40.   
    41.         @Override  
    42.         public boolean onDoubleTap(MotionEvent e)  
    43.         {  
    44.             // TODO Auto-generated method stub  
    45.             Log.i("TEST", "onDoubleTap");  
    46.             return super.onDoubleTap(e);  
    47.         }  
    48.   
    49.         @Override  
    50.         public boolean onDown(MotionEvent e)  
    51.         {  
    52.             // TODO Auto-generated method stub  
    53.             Log.i("TEST", "onDown");  
    54.             return super.onDown(e);  
    55.         }  
    56.   
    57.         @Override  
    58.         public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,  
    59.                 float velocityY)  
    60.         {  
    61.             // TODO Auto-generated method stub  
    62.             Log.i("TEST", "onFling:velocityX = " + velocityX + " velocityY" + velocityY);  
    63.             return super.onFling(e1, e2, velocityX, velocityY);  
    64.         }  
    65.   
    66.         @Override  
    67.         public void onLongPress(MotionEvent e)  
    68.         {  
    69.             // TODO Auto-generated method stub  
    70.             Log.i("TEST", "onLongPress");  
    71.             super.onLongPress(e);  
    72.         }  
    73.   
    74.         @Override  
    75.         public boolean onScroll(MotionEvent e1, MotionEvent e2,  
    76.                 float distanceX, float distanceY)  
    77.         {  
    78.             // TODO Auto-generated method stub  
    79.             Log.i("TEST", "onScroll:distanceX = " + distanceX + " distanceY = " + distanceY);  
    80.             return super.onScroll(e1, e2, distanceX, distanceY);  
    81.         }  
    82.   
    83.         @Override  
    84.         public boolean onSingleTapUp(MotionEvent e)  
    85.         {  
    86.             // TODO Auto-generated method stub  
    87.             Log.i("TEST", "onSingleTapUp");  
    88.             return super.onSingleTapUp(e);  
    89.         }  
    90.           
    91.     }  
    92. }  

    //以上部分内容选自网络

  • 相关阅读:
    CentOS7 安装 RabbitMQ
    测试工程师 - 要了解的技能总结
    STF 连接其它操作系统上的安卓设备实操介绍【转】
    adb -a server nodaemon,设备一直显示 offline,而 adb devices 一直显示 device【已解决】
    Mac 之 STF 搭建(淘宝源安装)
    无损压缩图片
    jenkins 之 Android 打包及上传至蒲公英
    JoinPoint
    元数据库 information_schema.tables
    @RestControllerAdvice全局异常统一处理
  • 原文地址:https://www.cnblogs.com/ldq2016/p/5290929.html
Copyright © 2011-2022 走看看