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手势检测内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

Android如何使用GestureDetector进行手势检测详解的更多相关文章

  1. Pan和2 Finger Pinch同步iOS – 同时 –

    2手势识别器:和:但同时捏和平底锅不起作用……

  2. ios – 视图的简单拖放?

    我正在学习iOS,但我找不到如何向UIView添加拖放行为.我试过了:它说“UIView没有可见的接口声明选择器addTarget”此外,我尝试添加平移手势识别器,但不确定这是否是我需要的它被称为,但不知道如何获得事件的坐标.在iOS中注册移动事件回调/拖放操作的标准简单方法是什么?

  3. ios – Swift 4添加手势:覆盖vs @objc

    我想在我的视图中添加一个手势,如下所示:但是,在Swift4中,我的编译器给出了以下错误:建议添加@objc以将此实例方法公开给Objective-C.实现此目的的另一个选项将覆盖touchesBegan()函数并使用它来处理点击.我试图以“Swift”的方式做到这一点,而不必带入Obj-C.有没有纯粹的Swift方式来添加这个轻击手势而不使用@objc?

  4. ios – UINavigationController自定义动画可防止滑动返回工作

    我注意到一些奇怪的东西,可能是UINavigationController中的一个错误.当你覆盖-navigationController:animationControllerForOperation:fromViewController:toViewController:并返回nil(对于默认的动画行为),拖放回去的手势不再有效.此方法的文档说明如果要使用标准导航控制器转换,则应返回“nil”

  5. ios – UITableView滑动手势与UITableViewCell滑动冲突

    以下是我编写的用于在UITableView上放置2个手指滑动的代码:我正在使用SWTableViewCell左右(单击)gestureRecognisers.当使用2个手指向左/向右滑动UITableView时,SWTableViewCell左右手势也会在此之后被触发.如何制止冲突?解决方法当您触摸SWTableViewCell时,将BOOLSWTableViewCellTouch设置为YES.

  6. ios – iPad – 如何检测启用多任务手势?

    参见英文答案>Howtodisable4fingergesturesoniPad?3个我创建了一个iPad应用程序,如果没有启用多任务手势,它会很有帮助.我知道你不能从应用程序本身禁用它们(感谢上帝应用程序不能自己决定).但我想要做的是在启动多任务手势的情况下在启动时显示警告,并建议用户关闭它们以获得最佳使用效果.我见过应用程序做同样的事情,比如Apple的GarageBand.在该应用程序中,多

  7. ios – 点击手势不适合我

    我开始使用这个Appletutorial了.所以我通过拖放图像视图创建了一个TapGesture,然后我控制–拖动到我的UIViewControler并成功创建了Event.但我的问题是它没有解雇这个事件.我还有其他事要做吗?

  8. ios – 仅在视图的一部分上接收轻击手势

    我在视图控制器中有一个UIImageView.是否可以使图像视图的某些区域可以进行处理?解决方法您可以使用handleGesture方法.首先,您需要创建一个接收触摸的位置,您必须将其与委托方法中的触摸位置进行比较,如下所示:在viewdidload中下一个委托方法

  9. iOS 7在右侧添加了幻灯片,可以将视图控制器从堆栈中弹出.是否可以通过向左滑动将其添加回去?

    或者有关于如何完成它的任何信息?

  10. ios – 使用UIWebView的手势识别

    谢谢.克里斯谢谢克里斯解决方法尝试将UIWebView包装在UIView容器中,并在容器视图上设置手势识别器.触摸未由UIWebView处理的事件将被传递给视图层次结构,并被容器视图拦截,假设它实现了相应的处理程序(并且这些处理程序应该实现隐藏工具栏的代码…

随机推荐

  1. Flutter 网络请求框架封装详解

    这篇文章主要介绍了Flutter 网络请求框架封装详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. Android单选按钮RadioButton的使用详解

    今天小编就为大家分享一篇关于Android单选按钮RadioButton的使用详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

  3. 解决android studio 打包发现generate signed apk 消失不见问题

    这篇文章主要介绍了解决android studio 打包发现generate signed apk 消失不见问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  4. Android 实现自定义圆形listview功能的实例代码

    这篇文章主要介绍了Android 实现自定义圆形listview功能的实例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  5. 详解Android studio 动态fragment的用法

    这篇文章主要介绍了Android studio 动态fragment的用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  6. Android用RecyclerView实现图标拖拽排序以及增删管理

    这篇文章主要介绍了Android用RecyclerView实现图标拖拽排序以及增删管理的方法,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下

  7. Android notifyDataSetChanged() 动态更新ListView案例详解

    这篇文章主要介绍了Android notifyDataSetChanged() 动态更新ListView案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

  8. Android自定义View实现弹幕效果

    这篇文章主要为大家详细介绍了Android自定义View实现弹幕效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  9. Android自定义View实现跟随手指移动

    这篇文章主要为大家详细介绍了Android自定义View实现跟随手指移动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. Android实现多点触摸操作

    这篇文章主要介绍了Android实现多点触摸操作,实现图片的放大、缩小和旋转等处理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部