触摸事件与手势监听--Android GestureDetector详解

目录

  • 事件监听的方法
  • GestureDetector类
  • GestureDetector使用方法
  • GesturetDetector.OnGestureListener 接口
  • GesttureDetector.OnDoubleTapListener 接口
  • GesttureDetector.SimpleOnGestureListener 类

1:事件监听的方法

在android应用层上主要有两个层面的触摸事件监听,一个是Activity层,另一个是View层。方法主要有三种:
第一是Activity中重写父类中的public boolean onTouchEvent(MotionEvent event)方法;

@Override
    public boolean onTouchEvent(MotionEvent event) {
        return super.onTouchEvent(event);
    }

第二个是重写View类中的GestDetector.OnGestureListener 接口中定义的boolean onTouch(View v, MotionEvent event);

@Override
    public boolean onTouch(View v, MotionEvent event) {
        return false;
    }

第三个是利用GestureDetector.onTouchEvent(event)在View.onTouch方法中来接管事件处理

@Override
    public boolean onTouch(View v, MotionEvent event) {
        return mGestureDetector.onTouchEvent(event);
    }

当view上的事件被分发到view上时触发onTouch方法的回调, 如果这个方法返回false时,表示事件处理失败,该事件就会被传递给相应的Activity中的onTouchEvent方法来处理。
如果该方法返回true时,表示该事件已经被onTouch函数处理完,不会上传到activity中处理。


2:GestureDector类

GestureDector类需要注意以下内容:

  • OnGestureListener接口
  • OnDoubleTapListener双击接口
  • SimpleOnGestureListener 类(实现了类内的三个接口)
  • onTouchEvent()方法
  • setOnDoubleTapListener()双击监听

当屏幕上发生特定的触摸事件,就会去回调GestureDector.OnGestureListener和GestureDetector.OnDoubleTapListener接口中相应的回调函数来监测各样的手势和事件,并且通知用户。但是这些触发函数都没有具体的实现,我们必须实现这些接口,并重写这些方法的具体实现。
GestureDetector类中已经为我们定义了一个静态内部类SimpleOnGestureListener,它实现了OnGestureListener,OnDoubleTapListener,OnContextClickListener接口,定义为

 public static class SimpleOnGestureListener implements OnGestureListener, OnDoubleTapListener,
            OnContextClickListener 

SimpleOnGestureListener类内重写接口中的所有方法,但是都是空实现,返回的布尔值都是false。主要作用是方便我们继承这个类有选择的复写回调方法,而不是实现接口去重写所有的方法。
onTouchEvent()方法用来分析传入的事件,如果匹配的话就去触发OnGestureListener中相应的回调方法。
如果要监听双击事件必须调用GestureDector.setOnDoubleTapListener()


3:GestureDetector使用方法

第一步:实现OnGestureListener接口中的方法(可以使用匿名内部类或实现了接口的类实例)
内部类形式

class MyGestureListener implements GestureDetector.OnGestureListener {

        @Override
        public boolean onDown(MotionEvent e) {
            return false;
        }

        @Override
        public void onShowPress(MotionEvent e) {

        }

        @Override
        public boolean onSingleTapUp(MotionEvent e) {
            return false;
        }

        @Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
            return 
  • 9
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android GestureDetector 可以用来处理常见的手势事件,包括滑动、双击、长按等等。下面是一个简单的示例,展示如何使用 GestureDetector 监听滑动事件: 1. 创建 GestureDetector 对象 ``` private GestureDetector mGestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() { @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { // 在这里处理滑动事件 return true; } }); ``` 2. 重写 Activity 的 onTouchEvent 方法,将事件交给 GestureDetector 处理 ``` @Override public boolean onTouchEvent(MotionEvent event) { return mGestureDetector.onTouchEvent(event); } ``` 3. 在 onFling 方法中处理滑动事件 ``` @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { float distanceX = e2.getX() - e1.getX(); float distanceY = e2.getY() - e1.getY(); if (Math.abs(distanceX) > Math.abs(distanceY)) { if (distanceX > 0) { // 向右滑动 } else { // 向左滑动 } } else { if (distanceY > 0) { // 向下滑动 } else { // 向上滑动 } } return true; } ``` 这里使用了 onFling 方法来处理滑动事件。在这个方法中,我们可以获取两个 MotionEvent 对象,分别表示滑动的起始点和结束点。然后,我们可以通过计算这两个点的坐标差值来判断滑动的方向和距离。 以上是一个简单的使用 GestureDetector 监听滑动事件的示例。如果需要监听其他手势事件,可以在 SimpleOnGestureListener 中重写对应的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值