Skip to content

Commit db51d37

Browse files
committed
Update
1 parent 5e3feb1 commit db51d37

1 file changed

Lines changed: 8 additions & 8 deletions

File tree

CustomView/Advance/[18]multi-touch.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# 多点触控详解
1+
# Android 多点触控详解
22

33
Android 多点触控详解,在前面的几篇文章中我们大致了解了 Android 中的事件处理流程和一些简单的处理方案,本次带大家了解 Android 多点触控相关的一些知识。
44

@@ -48,7 +48,7 @@ Android 多点触控详解,在前面的几篇文章中我们大致了解了 An
4848

4949
在引入多点触控之前,事件的类型很少,基本事件类型只有按下(down)、移动(move) 和 抬起(up),即便加上那些特殊的事件类型也只有几种而已,所以我们可以用几个常量来标记这些事件,在使用的时候使用 `getAction()` 方法来获取具体的事件,之后和这些常量进行对比就行了。
5050

51-
在 Android 2.0 版本的时候,开始引入多点触控技术,由于技术上并不成熟,硬件和驱动也跟不上,很数设备只能支持追踪两三个点而已,因此在设计 API 上采取了一种简单粗暴的方案,添加了几个常量用语多点触控的事件类型的判断。
51+
在 Android 2.0 版本的时候,开始引入多点触控技术,由于技术上并不成熟,硬件和驱动也跟不上,多数设备只能支持追踪两三个点而已,因此在设计 API 上采取了一种简单粗暴的方案,添加了几个常量用语多点触控的事件类型的判断。
5252

5353
| 事件 | 简介 |
5454
| ----------------------- | -------------------- |
@@ -243,17 +243,17 @@ switch (event.getActionMasked()) {
243243
| 第4个手指按下 | ACTION_POINTER_DOWN (0x0000**01**05) |
244244
| **第3个手指抬起** | ACTION_POINTER_UP (0x0000**02**06) |
245245

246-
这个要和上一个对比这看,**重点观察第 3 个手指所触发事件区别**,在上一个示例中,随着第 2 个手指的抬起,第 3 个手指变化为第 2 个,所以抬起时触发的是第 2 根手指的抬起事件(删除线部分)。
246+
这个要和上一个对比这看,**重点观察第 3 个手指所触发事件区别**,在上一个示例中,随着第 2 个手指的抬起,第 3 个手指变化为第 2(01) 个,所以抬起时触发的是第 2 根手指的抬起事件(删除线部分)。
247247

248-
但是,如果第 2 个手指抬起后,落在屏幕上另外一个手指会怎样?经过测试,发现另外**落下的手指会替代之前第 2 个手指的位置,系统判定为 2,而不是顺延下去变成 3**,但是如果继续落下其他的手指,数值则会顺延。
248+
但是,如果第 2 个手指抬起后,落在屏幕上另外一个手指会怎样?经过测试,发现另外**落下的手指会替代之前第 2 个手指的位置,系统判定为 2(01),而不是顺延下去变成 3(02),并且原本第3个手指的index变为原来数值(02)**,但是如果继续落下其他的手指,数值则会顺延。
249249

250-
**即手指抬起时的 Index 会趋向于和按下时相同,虽然在手指数量不足时,Index 会变小,但是当手指变多时,Index 会保持和按下时一样**
250+
**即手指抬起时的 Index 会趋向于和按下时相同,虽然在手指数量不足时,Index 会变小,但是当手指变多时,Index 会趋向于保持和按下时一样**
251251

252252
> PS:由于程序是从0开始计数的,所以 0 就是 1, 1 就是 2 ...
253253
254254
#### 3.4、对 move 事件无效。
255255

256-
这个也比较容易理解,我们所取得的 Index 属性实际上是从事件上分离下来的,但是 move 事件始终为 0x0000**00**02,也就是说,在 move 时不论你移动哪个手指,使用 ` getActionIndex()` 获取到的始终是数值 0。
256+
这个也比较容易理解,我们所取得的 Index 属性实际上是从事件上分离下来的,但是 move 事件始终为 0x0000**00**02,也就是说,在 move 时不论你移动哪个手指,使用 `getActionIndex()` 获取到的始终是数值 0。
257257

258258
既然 move 事件无法用事件索引(Index)区别,那么该如何区分 move 是那个手指发出的呢?这就要用到 pointId 了,**pointId 和 index 最大的区别就是 pointId 是不变的,始终为第一次落下时生成的数值,不会受到其他手指抬起和落下的影响。**
259259

@@ -410,7 +410,7 @@ public class MultiTouchTest extends CustomView {
410410

411411
举一个简单的例子:
412412

413-
如果我们需要一个**可以用单指拖动的图片**加入我们不进行多指触控的判断,像下面这样:
413+
如果我们需要一个**可以用单指拖动的图片**假如我们不进行多指触控的判断,像下面这样:
414414

415415
**没有针对多指触控处理版本:**
416416

@@ -610,4 +610,4 @@ public class DragView extends CustomView {
610610

611611

612612

613-
[motionevent]: http://www.gcssloop.com/customview/motionevent
613+
[motionevent]: http://www.gcssloop.com/customview/motionevent

0 commit comments

Comments
 (0)