Android onTouch事件与手势操作
2015-07-20 20:11
330 查看
触摸,手势操作已经很好的融入了我们的生活。那么Android开发中触摸事件要如何捕捉?如何处理?如何识别手势?事件的传递机制又是怎么样的?下面我们将通过一个小例子来进行这方面的学习。
先看效果图
如上图所示,就是一个跟随手指移动的按钮。用来演示我们接下来要说的onTouch事件和手势操作。
为了让大家看懂里面的代码,我们来先介绍一下基础知识。
onTouch事件
做什么都好先了解原理以后的工作就会更简单,关于手势以及我们熟悉的onclick,
onLongClick事件都是基于对onTouch事件的捕捉和处理。那么在使用手势工具类的前提下我们应该去学习了解基本的onTouch事件。
onTouch常用的以下4个事件:
1、ACTION_DOWN:
表示按下了屏幕,第一个执行也是必然执行的方法。
2、ACTION_MOVE:
表示为移动手势,会不断的执行直到触摸停止。
3、ACTION_UP :
表示为离开屏幕,触摸停止的时候执行。
4、ACTION_CANCEL:
表示取消手势,不会由用户产生,而是由程序产生的。
一个Action_DOWN, 多个ACTION_MOVE, 1个ACTION_UP,就构成了Android中众多的事件。
onTouch的参数
View
受到Touch事件的view对象
MotionEvent
包含的事件的详细信息,例如触摸点的信息,触摸事件类型的信息等
MotionEvent的方法例如getRowX所描述的都是触摸点的信息。
几个重要方法的说明:
getRowX:触摸点相对于屏幕的坐标
getX: 触摸点相对于view的坐标
getTop: 按钮左上角相对于父view(LinerLayout)的y坐标
getLeft: 按钮左上角相对于父view(LinerLayout)的x坐标
onTouch的返回值
这个部分涉及到事件传递和处理机制,详细的不在此介绍。
作用:
这里的返回值代表的是,对于这个触摸事件touch是否已经处理完成。
如果我们设置返回值为true代表的是处理完成,这样就不会再传递给下一个对象。也就是说后面的控件或者对象就不会接收到触摸事件了。
反之,后面的对象或控件会在此接收到这个触摸事件并被调用。
实践
在学习基础知识之后,我们来看看如何使用这些来实现一个可以拖动的按钮吧。
思路
这里的主要思路就是在ACTION_DOWN按下的第一时间记录下初始的状态,在ACTION_MOVE滑动事件中不断的刷新按钮的位置。
为了保证有我们正常理解下的点击事件发生,下面我还加了位置是否移动的判断。
下面是实现该功能的内部类
[Java] 纯文本查看 复制代码
?
[Java] 纯文本查看 复制代码
?
关于手势操作,这里其实说的是Android提供的工具类,通过GestureDetector 类来识别和处理onTouch事件,简化使用。
一般用到下面的三个类。
android.view.GestureDetector
手势操作的识别类,通过他来使用下面的识别接口。
android.view.GestureDetector.SimpleOnGestureListener
手势识别的接口类,使用他可以按需重载自己想要的方法,方法多
android.view.GestureDetector.OnGestureListener;
手势识别的类,SimpleOnGestureListener接口的父类。使用他需要实现他所有的方法。
方法说明:
OnGestureListener有下面的几个方法:
按下(onDown):
在按下时调用。
抛掷(onFling):
手指在触摸屏上迅速移动,并松开的动作。
长按(onLongPress):
手指按在持续一段时间,并且没有松开。
滚动(onScroll):
手指在触摸屏上滑动。
按住(onShowPress):
手指按在触摸屏上,它的时间范围在按下起效,在长按之前。
抬起(onSingleTapUp):
手指离开触摸屏的那一刹那。
SimpleOnGestureListener比OnGestureListener多出来的方法:
双击(onDoubleTap)
双击的第二下Touch down时触发
双击事件(onDoubleTapEvent)
双击的第二下Touch down和up都会触发一次,可用e.getAction()区分。
实践
好了,学习完了基础知识之后我们来用手势操作的工具类来实现我们的小按钮吧。
下面来实现我们的手势操作内部类。这里我直接实现了OnGestureListener 接口,为了更好的演示效果。
[Java] 纯文本查看 复制代码
?
[Java] 纯文本查看 复制代码
?
[Java] 纯文本查看 复制代码
?
[Java] 纯文本查看 复制代码
?
可以拖动的按钮,这个功能的核心代码是
[Java] 纯文本查看 复制代码
?
[Java] 纯文本查看 复制代码
?
相关文章推荐
- Android系统启动过程(转载)
- android优化(json工具,message新建/传递,avtivity深入学习视频)
- [Android初级]android单元测试之Activity单独测试
- Android中动态添加View的两种方法
- Android:安装时提示:INSTALL_FAILED_INSUFFICIENT_STORAGE
- android window
- Android防止图片重复、错位、闪烁的解决方案
- android library使用方法
- android:windowSoftInputMode属性使用
- android获取屏幕尺寸和密度
- Android之——图片的内存优化
- android Activity之间数据传递 Parcelable和Serializable接口的使用
- Android之Toast使用
- Home,Back,Menu
- Android疑惑记录-----在Adapter中配置按钮监听器时,列表项内容获取混乱的问题
- Android四大组件之二:Service
- ViewPager相关笔记
- 【攻克Android (3)】资源国际化、屏幕适配
- Android_适配渠道包
- android之如何在两个activity之间传递handler_利用broadcast广播机制