目录

  • 前言
  • 初步了解手势操作
  • 六个重写方法
  • 小栗子体验一下
  • 别忘了双击事件
  • 最后

前言

手势操作是Android交互当中至关重要的. 可以说, 如果一个软件没有好的手势操作, 就不能将其定义为移动端的软件. 这里来看下谷歌提供的GestureDetector类. 搭配属性动画使用, 效果更好哦.


初步了解手势操作

先来一段可以快速了解手势操作类的代码. 这里用到了GestureDetector.SimpleOnGestureListener(), 可以暂时理解为是一个适配器, 快速实现GestureDetector.OnGestureListener接口中要实现的方法. 这样的话, 你就可以按需实现, 不用全部重写所有方法.

public class MainActivity extends AppCompatActivity {private GestureDetector mGestureDetector;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button btHello = (Button) findViewById(R.id.bt_hello);mGestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() {@Overridepublic boolean onDown(MotionEvent e) {Toast.makeText(MainActivity.this,"onDown", Toast.LENGTH_SHORT).show();return false;}@Overridepublic void onShowPress(MotionEvent e) {Toast.makeText(MainActivity.this,"onShowPress", Toast.LENGTH_SHORT).show();}@Overridepublic boolean onSingleTapUp(MotionEvent e) {Toast.makeText(MainActivity.this,"onSingleTapUp", Toast.LENGTH_SHORT).show();return false;}@Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {Toast.makeText(MainActivity.this,"onScroll", Toast.LENGTH_SHORT).show();return false;}@Overridepublic void onLongPress(MotionEvent e) {Toast.makeText(MainActivity.this,"onLongPress", Toast.LENGTH_SHORT).show();}@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {Toast.makeText(MainActivity.this,"onFling", Toast.LENGTH_SHORT).show();return false;}});btHello.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {return mGestureDetector.onTouchEvent(event);}});}
}

可以看到手势操作其实就是丰富了原来的触摸事件. 在触摸操作实现那里进行拦截. 然后有六个可重写的方法. 来分析一下这几个方法.


六个重写方法

  • onDown 这个很好理解了, 就是按下的操作.
  • onShowPress 这个的意思是按压. 什么是按压, 就是比按下更用力, 更多一点时间.
  • onLongPress 这个就是长按了. 比方说你一直按着按钮, 那么执行顺序就是onDown–>onShowPress–>onLongPress.
  • onSingleTapUp 这个就是单点抬手. 就是你单击按钮抬手的那下. 但是有一点要注意. 如果你点击时长小于onLongPress, 它是会触发的, 如果大于onLongPress, 它就不会触发了.
  • onScroll 拖动相应. 就是拖着某个控件, 这个就会触发.
  • onFling 滑动相应. 就是快速划一下, 它就会触发.

小栗子体验一下

也说了一些, 我们来体验下.

我们拎着按钮绕了一圈, 我们看下后台的打印.

onDown
onShowPress
onScroll
onScroll
onScroll
onScroll
onScroll
onScroll

然后我们再来一次, 先点击一下, 再绕一圈. 点击时候发生了:

onDown
onShowPress
onSingleTapUp

绕圈时候是:

onDown
onShowPress
onScroll
onScroll
onScroll
onFling

我们先看下点击事件, 点下去就是onDown, 稍微多点一会儿就会触发onShowPress, 然后抬手就是onSingleTapUp.

然后分析第一次绕圈, 点下去onDown, 停留onShowPress, 拖动onScroll, 之后就是多次拖动. 很好理解. 那么再看第二次, 多了一个onFling, 而且是在最后, 就是说, 我们的拖动操作, 最后抬手的时候会触发onFling, 但是不是100%. 所以处理的时候要区分这两种操作, 以免冲突.


别忘了双击事件

在pc上, 双击事件是非常常见的, 可以到了移动端, 这种操作就用的不那么多了. 不过我们还是来看看. 先上栗子:

@Override
public boolean onDoubleTap(MotionEvent e) {Toast.makeText(MainActivity.this,"onDoubleTap", Toast.LENGTH_SHORT).show();LogUtil.i("onDoubleTap");return super.onDoubleTap(e);
}

双击按钮之后:

onDown
onShowPress
onSingleTapUp
onDoubleTap
onDown
onShowPress

这里出现了新加入的onDoubleTap, 也就是快速点击被识别到了.
为什么可以直接加入呢, 因为GestureDetector.SimpleOnGestureListener()之中也实现了GestureDetector.OnDoubleTapListener中的内容. 如果你不使用GestureDetector.SimpleOnGestureListener()的话, 可以使用如下代码实现GestureDetector.OnDoubleTapListener接口.

class MyDoubleTap implements GestureDetector.OnDoubleTapListener{@Overridepublic boolean onSingleTapConfirmed(MotionEvent e) {return false;}@Overridepublic boolean onDoubleTap(MotionEvent e) {return false;}@Overridepublic boolean onDoubleTapEvent(MotionEvent e) {return false;}
}

所以说GestureDetector.SimpleOnGestureListener()真的很好用啊, 但是如果你有多个对象要使用的话, 还是老实复写吧.


最后

还有很多新的手势操作, 绝对不止我文章中写的这些. 但是这些已经足够入门和大多数手势了. 喜欢记得点赞或者关注我哦.


Android手势操作耍起来!相关推荐

  1. Android手势操作

    手势操作在我们使用智能设备的过程中奉献了不一样的体验.Android开发中必然会进行手势操作方面的编程.那么它的原理是怎样的呢?我们如何进行手势操作编程呢? 手势操作原理首先,在Android系统中, ...

  2. Android 手势操作GestureDetector

    在很多应用中我们经常会看到一些不同手势的点击事件,例如QQ的消息列表,我们可以通过左滑消息来选择删除或者置顶或者标记为已读,我们也可以通过右滑拖出QQ菜单.有些应用中还会有长按,双击等手势.但是一般情 ...

  3. android手势操作滑动效果触摸屏事件处理

    2019独角兽企业重金招聘Python工程师标准>>> 很多时候,利用触摸屏的Fling.Scroll等Gesture(手势)操作来操作会使得应用程序的用户体验大大提升,比如用Scr ...

  4. android 手势操作垂直滑动,Android-水平和垂直方向都可滑动的RecycleView

    最近有点忙,项目进度跟的比较紧.最近需求那边让我们写一个左右和上下都可滑动的列表,用来展示多个Title的值.这里我把需求简化了一下.老规矩,先看图. 在看到需求的时候,有在网上看看有没有别人造好的轮 ...

  5. android touch事件坐标原点,Android onTouch事件与手势操作

    触摸,手势操作已经很好的融入了我们的生活.那么Android开发中触摸事件要如何捕捉?如何处理?如何识别手势?事件的传递机制又是怎么样的?下面我们将通过一个小例子来进行这方面的学习. 先看效果图 如上 ...

  6. Android 触摸及手势操作GestureDetector

    现在的智能手机不敢说百分百的都是触摸屏,也应该是百分之九九以上为触摸屏了,触摸屏为我们操作无键盘.无鼠标的手机系统带来了很多的便利.当用户触摸屏幕时会产生很多的触摸事件,down.up.move等等. ...

  7. Android之GestureDetector-简单手势操作及通过手势缩放图片,我离职后面试收割小米等大厂offer

    Android提供了手势检测,并为其提供了相应的监听器,需要用到的类是GestureDetector,其实例代表了一个手势检测器,创建GestureDetector时需要传入一个GestureDete ...

  8. 索尼xz2android设置向导,索尼为Xperia XZ2 Premium推送Android 9.0 迎来全新手势操作

    我们此前报道过,索尼曾计划于10月26日为Xperia XZ Premium,Xperia XZ1和Xperia XZ1 Compact推送Android 9.0更新,但是新系统出现了一些软件级的错误 ...

  9. android+p手势操作,手势操作哪家强:Android P对比iPhone X

    [环球网综合科技报道]据科技博客The Verge5月8日的博文称,Android P给谷歌的操作系统带来了大量的更新设计,其中最为突出的是新近推出的手势操作界面系统.很多人注意到该界面系统与苹果去年 ...

最新文章

  1. ASP.NET中 DropDownList+DetailsView(详细视图)的使用前台绑定
  2. TODO monkey笔记,PC端执行和手机端执行
  3. PHP判断变量内容是什么编码(gbk?utf-8) mb_detect_encoding
  4. JavaScript初学者必看“new”
  5. asp.net mvc webform和razor的page基类区别
  6. 《SEO的艺术(原书第2版)》——3.11 为意识形态影响力开展SEO
  7. 如何使用maven打包
  8. 使用eclipse编写第一个Java程序及运行(超详细)
  9. 如何正确地给固态硬盘(SSD)分区
  10. SP3232串口上电瞬间发乱码问题
  11. vue-video-play使用方法
  12. 开源嵌入式GIS引擎基于ucGUI
  13. TCP与UDP服务器和客户端的搭建
  14. 幼儿园ppt计算机考试试题,《幼儿园课件制作》期末试卷A卷
  15. Maven介绍(翻译自官方文档)
  16. AndroidMaterialDesign动画之Curved Motion
  17. IBM最好的办法不应该是卖掉PC - 我对联想收购IBM的看法。
  18. IDEA解决代码提示功能消失
  19. 两种努力,消极性努力和积极性努力(转载)
  20. 阳新一中2021高考成绩查询入口,点燃激情 赢在高考 阳新一中举办2021届高三高考励志演讲报告会...

热门文章

  1. 小蚁智能摄像机服务器故障,小蚁智能摄像机app怎么和摄像头连接
  2. fiddler拦截请求、篡改响应内容、模拟弱网
  3. Python智能机器人2(电脑应用的使用,聊天等功能)
  4. Type ‘java.util.Observable‘ does not have type parameters
  5. vc驿站视频教程笔记4 Cstring 讲解
  6. IOS学习笔记56-IOS7状态栏适配方法一
  7. Java实现 LeetCode 764 最大加号标志(暴力递推)
  8. HIS系统门急诊医保实时结算接口测试
  9. 基于图正则化的贝叶斯宽度学习系统
  10. 步进电机正反转实验_只用一个接触器实现三相电机正反转