Android如何使用GestureDetector进行手势检测详解

 更新时间:2022年01月26日 16:22:25   作者:QiShare  
GestureDetector使用很方便,提供了单击,双击,长按等操作的处理,但是一般的定义界面都比较复杂,还用很多需要注意的地方,这篇文章主要给大家介绍了关于Android如何使用GestureDetector进行手势检测的相关资料,需要的朋友可以参考下

1.引言

在操作应用的时候,会有很多不同的手势操作,如按下、单击、双击、长按等手势,我们可以在这些手势事件中添加相应的业务逻辑,那么如何检测不同的手势操作就比较重要了,本文将带大家了解如何使用GestureDetector进行手势检测。

2.进行手势检测

2.1 创建GestureDetector

进行手势检测之前,需要先新建GestureDetector对象,示例如下:

gestureDetector = new GestureDetector(context, new GestureDetector.OnGestureListener() {
    @Override
    public boolean onDown(MotionEvent e) {
        log("onDown");
        return true;
    }

    @Override
    public void onShowPress(MotionEvent e) {
        log("onShowPress");
    }

    @Override
    public boolean onSingleTapUp(MotionEvent e) {
        log("onSingleTapUp");
        return true;
    }

    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
        log("onScroll");
        return true;
    }

    @Override
    public void onLongPress(MotionEvent e) {
        log("onLongPress");
    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        log("onFling");
        return true;
    }
});

2.2 与onTouchEvent结合使用

示例中重写了Activity的onTouchEvent(MotionEvent event)方法,并在其内部使用GestureDetector处理触摸事件,示例如下:

@Override
public boolean onTouchEvent(MotionEvent event) {
    boolean b = gestureDetector.onTouchEvent(event);
    if (b) {
        return true;
    }
    return super.onTouchEvent(event);
}

2.3 GestureDetector.OnGestureListener

实现GestureDetector.OnGestureListener内的方法,在其中可以检测到多种手势,如onDown(MotionEvent e)按下、onShowPress(MotionEvent e)已经执行按下,还没有移动或抬起、onSingleTapUp(MotionEvent e)单击、onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)滚动、onLongPress(MotionEvent e)长按、onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)。

2.4 检测双击手势

双击手势也是一种常见的手势事件,使用GestureDetector检测双击手势需要调用setOnDoubleTapListener()方法设置GestureDetector.OnDoubleTapListener(),并实现其中的方法,其中的onDoubleTap(MotionEvent e)表示双击事件,示例如下:

gestureDetector.setOnDoubleTapListener(new GestureDetector.OnDoubleTapListener() {
    @Override
    public boolean onSingleTapConfirmed(MotionEvent e) {
        log("onSingleTapConfirmed");
        return true;
    }

    @Override
    public boolean onDoubleTap(MotionEvent e) {
        log("onDoubleTap");
        return true;
    }

    @Override
    public boolean onDoubleTapEvent(MotionEvent e) {
        log("onDoubleTapEvent");
        return true;
    }
});
}

2.5 GestureDetector.SimpleOnGestureListener

如果不想实现GestureDetector.OnGestureListener 内的多个方法,那么可以创建类并继承GestureDetector.SimpleOnGestureListener,示例如下:

class SimpleGestureListener extends GestureDetector.SimpleOnGestureListener{
    @Override
    public boolean onDown(MotionEvent e) {

        return true;
    }
}

在创建GestureDetector对象的时候,传入扩展后的类对象即可,示例如下:

gestureDetector = new GestureDetector(context, new SimpleGestureListener());

3.总结

使用GestureDetector能方便地进行手势检测,灵活合理地使用手势检测,在其中处理应用的业务逻辑,能让体验更加的友好。

到此这篇关于Android如何使用GestureDetector进行手势检测的文章就介绍到这了,更多相关Android GestureDetector手势检测内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Android中BroadCastReceiver组件

    详解Android中BroadCastReceiver组件

    这篇文章主要为大家详细介绍了Android中BroadCastReceiver组件,Broadcast Receiver是Android的五大组件之一,使用频率也很高,用于异步接收广播Intent,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • Android多边形区域递归种子填充算法的示例代码

    Android多边形区域递归种子填充算法的示例代码

    这篇文章主要介绍了Android多边形区域递归种子填充算法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • 分享Android微信红包插件

    分享Android微信红包插件

    这篇文章为大家准备了Android微信红包插件,轻轻松松帮助大家实现微信红包功能,感兴趣的小伙伴们可以参考一下
    2015-12-12
  • Android实现绕球心旋转的引导页效果

    Android实现绕球心旋转的引导页效果

    本篇文章主要介绍了Android实现绕球心旋转的引导页效果,想要实现此效果的同学可以参考一下本文。
    2016-11-11
  • Android中使用Matrix控制图形变换和制作倒影效果的方法

    Android中使用Matrix控制图形变换和制作倒影效果的方法

    这篇文章主要介绍了Android中使用Matrix控制图形变换和制作倒影效果的方法,用Matrix来作矩阵变化十分强大,文中的制作倒影的例子便是一个十分巧妙的运用,需要的朋友可以参考下
    2016-04-04
  • android实现始终显示overflow菜单的方法

    android实现始终显示overflow菜单的方法

    这篇文章主要介绍了android实现始终显示overflow菜单的方法,需要的朋友可以参考下
    2014-07-07
  • Android学习笔记--Activity中使用Intent传值示例代码

    Android学习笔记--Activity中使用Intent传值示例代码

    Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用
    2013-06-06
  • Android库项目中的资源ID冲突的解决方法

    Android库项目中的资源ID冲突的解决方法

    本篇文章主要介绍了Android库项目中的资源ID冲突的解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • RecyclerView自定义分割线

    RecyclerView自定义分割线

    这篇文章主要为大家详细介绍了RecyclerView自定义分割线的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09
  • Android 自定义来电秀实现总结

    Android 自定义来电秀实现总结

    这篇文章主要为大家介绍了Android 自定义来电秀实现总结示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01

最新评论