|
1 | | -# 多点触控详解 |
| 1 | +# Android 多点触控详解 |
2 | 2 |
|
3 | 3 | Android 多点触控详解,在前面的几篇文章中我们大致了解了 Android 中的事件处理流程和一些简单的处理方案,本次带大家了解 Android 多点触控相关的一些知识。 |
4 | 4 |
|
@@ -48,7 +48,7 @@ Android 多点触控详解,在前面的几篇文章中我们大致了解了 An |
48 | 48 |
|
49 | 49 | 在引入多点触控之前,事件的类型很少,基本事件类型只有按下(down)、移动(move) 和 抬起(up),即便加上那些特殊的事件类型也只有几种而已,所以我们可以用几个常量来标记这些事件,在使用的时候使用 `getAction()` 方法来获取具体的事件,之后和这些常量进行对比就行了。 |
50 | 50 |
|
51 | | -在 Android 2.0 版本的时候,开始引入多点触控技术,由于技术上并不成熟,硬件和驱动也跟不上,很数设备只能支持追踪两三个点而已,因此在设计 API 上采取了一种简单粗暴的方案,添加了几个常量用语多点触控的事件类型的判断。 |
| 51 | +在 Android 2.0 版本的时候,开始引入多点触控技术,由于技术上并不成熟,硬件和驱动也跟不上,多数设备只能支持追踪两三个点而已,因此在设计 API 上采取了一种简单粗暴的方案,添加了几个常量用语多点触控的事件类型的判断。 |
52 | 52 |
|
53 | 53 | | 事件 | 简介 | |
54 | 54 | | ----------------------- | -------------------- | |
@@ -243,17 +243,17 @@ switch (event.getActionMasked()) { |
243 | 243 | | 第4个手指按下 | ACTION_POINTER_DOWN (0x0000**01**05) | |
244 | 244 | | **第3个手指抬起** | ACTION_POINTER_UP (0x0000**02**06) | |
245 | 245 |
|
246 | | -这个要和上一个对比这看,**重点观察第 3 个手指所触发事件区别**,在上一个示例中,随着第 2 个手指的抬起,第 3 个手指变化为第 2 个,所以抬起时触发的是第 2 根手指的抬起事件(删除线部分)。 |
| 246 | +这个要和上一个对比这看,**重点观察第 3 个手指所触发事件区别**,在上一个示例中,随着第 2 个手指的抬起,第 3 个手指变化为第 2(01) 个,所以抬起时触发的是第 2 根手指的抬起事件(删除线部分)。 |
247 | 247 |
|
248 | | -但是,如果第 2 个手指抬起后,落在屏幕上另外一个手指会怎样?经过测试,发现另外**落下的手指会替代之前第 2 个手指的位置,系统判定为 2,而不是顺延下去变成 3**,但是如果继续落下其他的手指,数值则会顺延。 |
| 248 | +但是,如果第 2 个手指抬起后,落在屏幕上另外一个手指会怎样?经过测试,发现另外**落下的手指会替代之前第 2 个手指的位置,系统判定为 2(01),而不是顺延下去变成 3(02),并且原本第3个手指的index变为原来数值(02)**,但是如果继续落下其他的手指,数值则会顺延。 |
249 | 249 |
|
250 | | -**即手指抬起时的 Index 会趋向于和按下时相同,虽然在手指数量不足时,Index 会变小,但是当手指变多时,Index 会保持和按下时一样。** |
| 250 | +**即手指抬起时的 Index 会趋向于和按下时相同,虽然在手指数量不足时,Index 会变小,但是当手指变多时,Index 会趋向于保持和按下时一样。** |
251 | 251 |
|
252 | 252 | > PS:由于程序是从0开始计数的,所以 0 就是 1, 1 就是 2 ... |
253 | 253 |
|
254 | 254 | #### 3.4、对 move 事件无效。 |
255 | 255 |
|
256 | | -这个也比较容易理解,我们所取得的 Index 属性实际上是从事件上分离下来的,但是 move 事件始终为 0x0000**00**02,也就是说,在 move 时不论你移动哪个手指,使用 ` getActionIndex()` 获取到的始终是数值 0。 |
| 256 | +这个也比较容易理解,我们所取得的 Index 属性实际上是从事件上分离下来的,但是 move 事件始终为 0x0000**00**02,也就是说,在 move 时不论你移动哪个手指,使用 `getActionIndex()` 获取到的始终是数值 0。 |
257 | 257 |
|
258 | 258 | 既然 move 事件无法用事件索引(Index)区别,那么该如何区分 move 是那个手指发出的呢?这就要用到 pointId 了,**pointId 和 index 最大的区别就是 pointId 是不变的,始终为第一次落下时生成的数值,不会受到其他手指抬起和落下的影响。** |
259 | 259 |
|
@@ -410,7 +410,7 @@ public class MultiTouchTest extends CustomView { |
410 | 410 |
|
411 | 411 | 举一个简单的例子: |
412 | 412 |
|
413 | | -如果我们需要一个**可以用单指拖动的图片**。加入我们不进行多指触控的判断,像下面这样: |
| 413 | +如果我们需要一个**可以用单指拖动的图片**。假如我们不进行多指触控的判断,像下面这样: |
414 | 414 |
|
415 | 415 | **没有针对多指触控处理版本:** |
416 | 416 |
|
@@ -610,4 +610,4 @@ public class DragView extends CustomView { |
610 | 610 |
|
611 | 611 |
|
612 | 612 |
|
613 | | -[motionevent]: http://www.gcssloop.com/customview/motionevent |
| 613 | +[motionevent]: http://www.gcssloop.com/customview/motionevent |
0 commit comments