Android 多点触控通信 技术关键点解析

因为研究 多点触控与ios以及web端的进行通信总结,现总结下Android多点触控,技术关键点

1.首先说明一下,三个函数作用:

getaction()

getactionMasked()

getactionIndex()

2.具体内容如下:

public static final int ACTION_MASK            = 0xff;

public static final int ACTION_POINTER_INDEX_MASK  = 0xff00;

public static final int ACTION_POINTER_INDEX_SHIFT = 8;

  public final int getAction() {

        return nativeGetAction(mNativePtr);

    }

public final int getActionMasked() {

        return nativeGetAction(mNativePtr) & ACTION_MASK;

    }

public final int getActionIndex() {

        return (nativeGetAction(mNativePtr) & ACTION_POINTER_INDEX_MASK)

                >> ACTION_POINTER_INDEX_SHIFT;

    }

3.

再讲解之前,首先我们需要明确一下,关于多点触控其他的一些字段的数据信息

downTime

eventTime

pointerCount

MotionEvent.PointerProperties[] 

MotionEvent.PointerCoords[]

width

height

其中PointerProperties  PointerCoords是两个对象

PointerProperties  对象中有 2个比较重要的字段

id

tooltype

PointerCoords 对象中有4个比较重要的对象

X  点击的x坐标

Y  点击的y坐标

pressure  按压的力度 力度值在 0 -1 之间,正常情况下  我么的触屏是0-0.1之前,当然具体手机具体参考

size  按压的面积  面积之同样在0 - 1 之间,

首先讲解downTime  :

从字面意思来说,感觉可能是按下的时间,但是其实这个名字是有误导意义的,

实际上它的作用是指的一次完整的按键事件的开始的时间,比如一次滑动事件,downtime是第一根手指落下的时间

(或者说屏幕上第一个落下手指的时间那次事件),也就是这次滑动事件开始的时间,再比如一次点击事件,或者截屏操作,总而言之,任何的一次操作的那个开始的时间。

eventTime:

这个比较简单:他是某次touch事件的执行时间;比如按下的这一时刻,执行时间

pointercount:

当前这次事件的指针数量

注意:这个地方有一个比较特殊的地方,就是当你有三根手指按在屏幕上,

当你松开的时候,此时你松开了一个手指,那么按理来说应该是剩下两个,pointercount是2

但是实际上还是三个,因为他代表的是那一时刻,指针的数量。(包含你松开的那个手指的指针)

再次注意:

不管是按下还是松开:没有同时松开两个手指的情况,即便你快出天际的松开,也会在事件的体现上,你是一根一根的手指松开。

现在来说

PointerProperties :

这个叫做指针的属性,其中一个字段非常重要叫做id:

id:的作用是用来表示当前的标识,是某个pointer的id值,用来标识她的唯一性;

注意,id的作用只是来标识她的唯一性,没有其他的意义。

id的排序从0开始,你一个手指按下,id为0

如果在按下则为1 ,再按下则为2 .以此类推

那么就 1 2 3 4 5

这个时候松开

2 和 3

那么

2 和 3 位置空置

如果这个时候有新加入的手指

则填补 2 和 3 的位置,按照 进入的先后顺序

PointerCoords:

x 坐标

y 坐标

pressure

size

对于这4个值来说没有什么特殊点要讲解的

唯一要说的是x 和y 是float类型

到此基本属性已经讲完,现在来说比较有意义的三个函数

getAction()  getActionMasked()  getActionIndex()

先看getAction的代码

  return nativeGetAction(mNativePtr);

我们并不清楚getaction做了什么,通过注释也只是知道它里面包含触控点信息;

getaction,主要存了两个内容

一个是触控数组索引,一个是触控事件动作

由高8位来存储 触控数组索引, 由低八位来存储触控事件动作

我们简称index和touchaction吧

首先来说touchaction,这个touchaction是代表的当前事件的动作。什么动作呢:

比如 按下,松开,多点按下,多点松开,滑动

对应的值 0  1        5  6                2

当然还有其他值,我们就先不做讨论

按下,松开,以及滑动,我就不多说什么了,

现在说下多点按下和多点松开,多点按下是指的第二个手指按下,以及第n个手指按下的事件都称为多指按下

同理多点松开也是一个道理

注意一点,不管多个手指按下还是多个手指松开,touchaction的顺序一定是0 5 6 1当然也有可能是0 5 5 5 6 6 6 1等等可能,看你按下的手指的数量来决定

总之是对称的555 和666 是对称来的。 而且开头和结尾一定是 0 1

touchaction说明白了之后,

我们在来说:

index:

首先我们需要知道在用户触摸事件中,有一个隐形的可变数组,数组不能有空置的索引元素。

这个数组是用来存储每个手指变化的节点的数组。

明白之后,

当我们按下1个手指之后,就把这个手指放入的数组中,

当我们按下第2个手指之后,就把这个手指放入的数组中,此时数组的的索引最大值为1

这个时候如果我们松开第二个手指的话,那么就要把数组中的索引为1的元素剔除,此时index就是1

如果这个时候我们松开第一个手指的话,那么就要把数组中的索引为0的元素剔除,此时index就是0

ok结束

再次开始一次

当我们按下1个手指之后,就把这个手指放入的数组中,

当我们按下第2个手指之后,就把这个手指放入的数组中,此时数组的的索引最大值为1

当我们按下第3个手指之后,就把这个手指放入的数组中,此时数组的的索引最大值为2

这个时候如果我们松开第二个手指的话,那么就要把数组中的索引为1的元素剔除,此时index就是1.

而且于此同时可变数组索引为1的位置,空闲,但是这个数组不能有空闲位置,所以就要把第三个手指的元素前移

,也就是第三个手指的元素要放入的索引为1的位置中去。

那么如果再有手指进来则以此类推。

如果再有手指出来也同样以此类推。

ok结束

再次开始一次

当我们按下1个手指之后,就把这个手指放入的数组中,

当我们按下第2个手指之后,就把这个手指放入的数组中,此时数组的的索引最大值为1

当我们按下第3个手指之后,就把这个手指放入的数组中,此时数组的的索引最大值为2

当我们松开第一个手指,那么就要把数组中的索引为0的元素剔除,此时index就是0.

当我们松开第二个手指,那么就要把数组中的索引为0的元素剔除,此时index就是0.

当我们松开第三个手指,那么就要把数组中的索引为0的元素剔除,此时index就是0.

对,以上几行我没有写错。

你看明白了吗? 亲😙

好了;分析到此结束,

这个时候你再去看

getaction = getactionindex+getactionmasked(当然我这么写不太准确)因为他们是高8位与低八位的组合。

但是你再回头看这几个函数相信你能看懂的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342