首页 > 其他分享 >Android GestureDetector

Android GestureDetector

时间:2022-12-09 18:05:16浏览次数:37  
标签:MotionEvent GestureDetector Log DEBUG ACTION return Android public


之前一直不知道这个类,在Android就以为只有鼠标的down和up事件,原来android为了增加用户体验,新增了GestureDetector类,也就是手势识别类,感觉就是将手指触摸屏幕的touch事件更加细分了,构造GestureDetector类时设置一个GestureDetector.OnGestureListener对象来实时监控用户的操作,OnGestureListener对象提供一些常见手势的重写方法,这样就能对不同的手势做不同的处理。

view plaincopy to clipboardprint?01.public class GestureActivity extends Activity implements View.OnTouchListener {   02.    Button btn = null;   03.    private GestureDetector mGestureDetector = null;   04.    /** Called when the activity is first created. */  05.    public void onCreate(Bundle savedInstanceState) {   06.        super.onCreate(savedInstanceState);   07.        setContentView(R.layout.main);   08.        btn = (Button) findViewById(R.id.button);   09.        btn.setOnTouchListener(this);   10.        mGestureDetector = new GestureDetector(this, new LearnGestureListener());   11.    }   12.    public boolean onTouch(View view, MotionEvent event) {   13.        return mGestureDetector.onTouchEvent(event);   14.    }   15.    class LearnGestureListener extends GestureDetector.SimpleOnGestureListener {   16.        @Override  17.        public boolean onSingleTapUp(MotionEvent ev) {   18.            Log.d("DEBUG", "onSingleTapUp");   19.            return true;   20.        }   21.        // 用户轻触触摸屏,尚未松开或拖动,由一个1个MotionEvent ACTION_DOWN触发   22.        // 注意和onDown()的区别,强调的是没有松开或者拖动的状态   23.        @Override  24.        public void onShowPress(MotionEvent ev) {   25.            Log.d("DEBUG", "onShowPress");   26.        }   27.        // 用户长按触摸屏,由多个MotionEvent ACTION_DOWN触发   28.        @Override  29.        public void onLongPress(MotionEvent ev) {   30.            Log.d("DEBUG", "onLongPress");   31.        }   32.        // 用户按下触摸屏,并拖动,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE触发   33.        @Override  34.        public boolean onScroll(MotionEvent e1, MotionEvent e2,   35.                float distanceX, float distanceY) {   36.            Log.d("DEBUG", "onScroll");   37.            return true;   38.        }   39.        // 用户轻触触摸屏,由1个MotionEvent ACTION_DOWN触发   40.        @Override  41.        public boolean onDown(MotionEvent ev) {   42.            Log.d("DEBUG", "onDownd");   43.            return true;   44.        }   45.        // 用户按下触摸屏、快速移动后松开,由1个MotionEvent ACTION_DOWN,   46.        // 多个ACTION_MOVE, 1个ACTION_UP触发   47.        // e1:第1个ACTION_DOWN MotionEvent   48.        // e2:最后一个ACTION_MOVE MotionEvent   49.        // velocityX:X轴上的移动速度,像素/秒   50.        // velocityY:Y轴上的移动速度,像素/秒   51.        @Override  52.        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,   53.                float velocityY) {   54.            Log.d("DEBUG", "onFling");   55.            return true;   56.        }   57.        // 用户(轻触触摸屏后)松开,由一个1个MotionEvent ACTION_UP触发   58.        public boolean onDoubleTap(MotionEvent event) {   59.            Log.d("DEBUG", "onDoubleTap");   60.            return true;   61.        }   62.    }   63.}  public class GestureActivity extends Activity

implements View.OnTouchListener {
Button btn = null;
private GestureDetector mGestureDetector = null;
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn = (Button) findViewById(R.id.button);
btn.setOnTouchListener(this);
mGestureDetector = new GestureDetector(this, new LearnGestureListener());
}
public boolean onTouch(View view, MotionEvent event) {
return mGestureDetector.onTouchEvent(event);
}
class LearnGestureListener extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onSingleTapUp(MotionEvent ev) {
Log.d("DEBUG", "onSingleTapUp");
return true;
}
// 用户轻触触摸屏,尚未松开或拖动,由一个1个MotionEvent ACTION_DOWN触发
// 注意和onDown()的区别,强调的是没有松开或者拖动的状态
@Override
public void onShowPress(MotionEvent ev) {
Log.d("DEBUG", "onShowPress");
}
// 用户长按触摸屏,由多个MotionEvent ACTION_DOWN触发
@Override
public void onLongPress(MotionEvent ev) {
Log.d("DEBUG", "onLongPress");
}
// 用户按下触摸屏,并拖动,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE触发
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
Log.d("DEBUG", "onScroll");
return true;
}
// 用户轻触触摸屏,由1个MotionEvent ACTION_DOWN触发
@Override
public boolean onDown(MotionEvent ev) {
Log.d("DEBUG", "onDownd");
return true;
}
// 用户按下触摸屏、快速移动后松开,由1个MotionEvent ACTION_DOWN,
// 多个ACTION_MOVE, 1个ACTION_UP触发
// e1:第1个ACTION_DOWN MotionEvent
// e2:最后一个ACTION_MOVE MotionEvent
// velocityX:X轴上的移动速度,像素/秒
// velocityY:Y轴上的移动速度,像素/秒
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
Log.d("DEBUG", "onFling");
return true;
}
// 用户(轻触触摸屏后)松开,由一个1个MotionEvent ACTION_UP触发
public boolean onDoubleTap(MotionEvent event) {
Log.d("DEBUG", "onDoubleTap");
return true;
}
}
}

标签:MotionEvent,GestureDetector,Log,DEBUG,ACTION,return,Android,public
From: https://blog.51cto.com/u_15907753/5926323

相关文章

  • android调试工具DDMS
       DDMS全称DalvikDebugMonitorService.DDMS为IDE和emultor及真正的android设备架起来了一座桥梁,Android DDMS将捕捉到终端的ID,并通过adb建立调试器,从而实现发送指......
  • Android 装载器---重启装载器
    在使用initLoader()方法时,如果指定ID的装载器存在,就使用这个既存的装载器,否则会创建一个新的。但是有些时候你会想要废弃旧的数据并重启装载器。你可以使用restartLoader(......
  • android 动画xml属性总结
    XML中 alpha渐变透明度动画效果scale渐变尺寸伸缩动画效果translate画面转换位置移动动画效果rotate画面转移旋转动画效果JavaCode中 AlphaAnimation渐变透明度动画效果S......
  • [译]Android防止内存的八种方法(下)
    在上一篇​​Android内存泄漏的八种可能(上)​​中,我们讨论了八种容易发生内存泄漏的代码。其中,尤其严重的是泄漏​​Activity​​对象,因为它占用了大量系统内存。不管内存泄......
  • Android中的EditText默认时不弹出软键盘的方法
    在做项目过程中,父Activity中用ViewPager中的子Activity EditText默认弹出软键盘。这是想屏蔽软键盘应该从 父Activity中处理。处理子Activity达不到效果。......
  • [译]Android内存泄漏的八种可能(上)
    ​​原文EightWaysYourAndroidAppCanLeakMemor​​Java是垃圾回收语言的一种,其优点是开发者无需特意管理内存分配,降低了应用由于局部故障(segmentationfault)导致......
  • Android的架构设计
    AS历史版本下载地址https://developer.android.google.cn/studio/archiveAndroid的架构设计干Android也有一点的年头,特此记录一下自己理解的App架构设计。......
  • android 网络可用否,以及类型
    在Android平台上开发基于网络的应用,必然需要去判断当前的网络连接情况。下面的代码,作为例子,详细说明了对于当前网络情况的判断。先看一个自己定义的应用类。viewplaincop......
  • android 进程管理
    系统会对进程的重要性进行评估,并将重要性以“oom_adj”这个数值表示出来,赋予各个进程;(系统会根据“oom_adj”来判断需要结束哪些进程,一般来说,“oom_adj”的值越大,该进程被系......
  • android webView 文字、图片分别加载。乱码问题
     1.加载url前,设置图片阻塞1.webSettings.setBlockNetworkImage(true);2.加载完毕后,关闭图片阻塞1.publicvoidonPageFinished(WebViewview,Stringurl){2.......