![](http://www.apkbus.com/data/attachment/forum/201506/30/095804s0gisz89616368qz.gif)
触摸,手势操作已经很好的融入了我们的生活。那么
Android
开发中触摸事件要如何捕捉?如何处理?如何识别手势?事件的传递机制又是怎么样的?下面我们将通过一个小例子来进行这方面的学习。
先看效果图
![](http://www.apkbus.com/data/attachment/forum/201506/30/095806b6tutapwmtweotkz.gif)
如上图所示,就是一个跟随手指移动的按钮。用来演示我们接下来要说的
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]
纯文本查看
复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
class
MyOnTouch
implements
OnTouchListener{
int
[] temp =
new
int
[] {
0
,
0
};
Boolean ismove =
false
;
int
downX =
0
;
int
downY =
0
;
|