Android 多點(diǎn)觸控通信 技術(shù)關(guān)鍵點(diǎn)解析

因?yàn)檠芯?多點(diǎn)觸控與ios以及web端的進(jìn)行通信總結(jié),現(xiàn)總結(jié)下Android多點(diǎn)觸控冠王,技術(shù)關(guān)鍵點(diǎn)

1.首先說明一下,三個(gè)函數(shù)作用:

getaction()

getactionMasked()

getactionIndex()

2.具體內(nèi)容如下:

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.

再講解之前,首先我們需要明確一下结澄,關(guān)于多點(diǎn)觸控其他的一些字段的數(shù)據(jù)信息

downTime

eventTime

pointerCount

MotionEvent.PointerProperties[]?

MotionEvent.PointerCoords[]

width

height

其中PointerProperties? PointerCoords是兩個(gè)對象

PointerProperties? 對象中有 2個(gè)比較重要的字段

id

tooltype

PointerCoords 對象中有4個(gè)比較重要的對象

X? 點(diǎn)擊的x坐標(biāo)

Y? 點(diǎn)擊的y坐標(biāo)

pressure? 按壓的力度 力度值在 0 -1 之間奕枝,正常情況下? 我么的觸屏是0-0.1之前棺榔,當(dāng)然具體手機(jī)具體參考

size? 按壓的面積? 面積之同樣在0 - 1 之間,

首先講解downTime? :

從字面意思來說隘道,感覺可能是按下的時(shí)間症歇,但是其實(shí)這個(gè)名字是有誤導(dǎo)意義的郎笆,

實(shí)際上它的作用是指的一次完整的按鍵事件的開始的時(shí)間,比如一次滑動事件当船,downtime是第一根手指落下的時(shí)間

(或者說屏幕上第一個(gè)落下手指的時(shí)間那次事件)题画,也就是這次滑動事件開始的時(shí)間,再比如一次點(diǎn)擊事件德频,或者截屏操作苍息,總而言之,任何的一次操作的那個(gè)開始的時(shí)間壹置。

eventTime:

這個(gè)比較簡單:他是某次touch事件的執(zhí)行時(shí)間竞思;比如按下的這一時(shí)刻,執(zhí)行時(shí)間

pointercount:

當(dāng)前這次事件的指針數(shù)量

注意:這個(gè)地方有一個(gè)比較特殊的地方钞护,就是當(dāng)你有三根手指按在屏幕上盖喷,

當(dāng)你松開的時(shí)候,此時(shí)你松開了一個(gè)手指难咕,那么按理來說應(yīng)該是剩下兩個(gè)课梳,pointercount是2

但是實(shí)際上還是三個(gè),因?yàn)樗淼氖悄且粫r(shí)刻余佃,指針的數(shù)量暮刃。(包含你松開的那個(gè)手指的指針)

再次注意:

不管是按下還是松開:沒有同時(shí)松開兩個(gè)手指的情況,即便你快出天際的松開爆土,也會在事件的體現(xiàn)上椭懊,你是一根一根的手指松開。

現(xiàn)在來說

PointerProperties :

這個(gè)叫做指針的屬性步势,其中一個(gè)字段非常重要叫做id:

id:的作用是用來表示當(dāng)前的標(biāo)識氧猬,是某個(gè)pointer的id值,用來標(biāo)識她的唯一性坏瘩;

注意盅抚,id的作用只是來標(biāo)識她的唯一性,沒有其他的意義桑腮。

id的排序從0開始泉哈,你一個(gè)手指按下,id為0

如果在按下則為1 破讨,再按下則為2 .以此類推

那么就 1 2 3 4 5

這個(gè)時(shí)候松開

2 和 3

那么

2 和 3 位置空置

如果這個(gè)時(shí)候有新加入的手指

則填補(bǔ) 2 和 3 的位置丛晦,按照 進(jìn)入的先后順序

PointerCoords:

x 坐標(biāo)

y 坐標(biāo)

pressure

size

對于這4個(gè)值來說沒有什么特殊點(diǎn)要講解的

唯一要說的是x 和y 是float類型

到此基本屬性已經(jīng)講完,現(xiàn)在來說比較有意義的三個(gè)函數(shù)

getAction()? getActionMasked()? getActionIndex()

先看getAction的代碼

? return nativeGetAction(mNativePtr);

我們并不清楚getaction做了什么提陶,通過注釋也只是知道它里面包含觸控點(diǎn)信息烫沙;

getaction,主要存了兩個(gè)內(nèi)容

一個(gè)是觸控?cái)?shù)組索引隙笆,一個(gè)是觸控事件動作

由高8位來存儲 觸控?cái)?shù)組索引锌蓄, 由低八位來存儲觸控事件動作

我們簡稱index和touchaction吧

首先來說touchaction升筏,這個(gè)touchaction是代表的當(dāng)前事件的動作。什么動作呢:

比如 按下瘸爽,松開您访,多點(diǎn)按下,多點(diǎn)松開剪决,滑動

對應(yīng)的值 0? 1? ? ? ? 5? 6? ? ? ? ? ? ? ? 2

當(dāng)然還有其他值灵汪,我們就先不做討論

按下,松開柑潦,以及滑動享言,我就不多說什么了,

現(xiàn)在說下多點(diǎn)按下和多點(diǎn)松開渗鬼,多點(diǎn)按下是指的第二個(gè)手指按下览露,以及第n個(gè)手指按下的事件都稱為多指按下

同理多點(diǎn)松開也是一個(gè)道理

注意一點(diǎn),不管多個(gè)手指按下還是多個(gè)手指松開譬胎,touchaction的順序一定是0 5 6 1當(dāng)然也有可能是0 5 5 5 6 6 6 1等等可能差牛,看你按下的手指的數(shù)量來決定

總之是對稱的555 和666 是對稱來的。 而且開頭和結(jié)尾一定是 0 1

touchaction說明白了之后堰乔,

我們在來說:

index:

首先我們需要知道在用戶觸摸事件中多糠,有一個(gè)隱形的可變數(shù)組,數(shù)組不能有空置的索引元素浩考。

這個(gè)數(shù)組是用來存儲每個(gè)手指變化的節(jié)點(diǎn)的數(shù)組。

明白之后被盈,

當(dāng)我們按下1個(gè)手指之后析孽,就把這個(gè)手指放入的數(shù)組中,

當(dāng)我們按下第2個(gè)手指之后只怎,就把這個(gè)手指放入的數(shù)組中袜瞬,此時(shí)數(shù)組的的索引最大值為1

這個(gè)時(shí)候如果我們松開第二個(gè)手指的話,那么就要把數(shù)組中的索引為1的元素剔除身堡,此時(shí)index就是1

如果這個(gè)時(shí)候我們松開第一個(gè)手指的話邓尤,那么就要把數(shù)組中的索引為0的元素剔除,此時(shí)index就是0

ok結(jié)束

再次開始一次

當(dāng)我們按下1個(gè)手指之后贴谎,就把這個(gè)手指放入的數(shù)組中汞扎,

當(dāng)我們按下第2個(gè)手指之后,就把這個(gè)手指放入的數(shù)組中擅这,此時(shí)數(shù)組的的索引最大值為1

當(dāng)我們按下第3個(gè)手指之后澈魄,就把這個(gè)手指放入的數(shù)組中,此時(shí)數(shù)組的的索引最大值為2

這個(gè)時(shí)候如果我們松開第二個(gè)手指的話仲翎,那么就要把數(shù)組中的索引為1的元素剔除痹扇,此時(shí)index就是1.

而且于此同時(shí)可變數(shù)組索引為1的位置铛漓,空閑,但是這個(gè)數(shù)組不能有空閑位置鲫构,所以就要把第三個(gè)手指的元素前移

浓恶,也就是第三個(gè)手指的元素要放入的索引為1的位置中去。

那么如果再有手指進(jìn)來則以此類推结笨。

如果再有手指出來也同樣以此類推包晰。

ok結(jié)束

再次開始一次

當(dāng)我們按下1個(gè)手指之后,就把這個(gè)手指放入的數(shù)組中禀梳,

當(dāng)我們按下第2個(gè)手指之后杜窄,就把這個(gè)手指放入的數(shù)組中,此時(shí)數(shù)組的的索引最大值為1

當(dāng)我們按下第3個(gè)手指之后算途,就把這個(gè)手指放入的數(shù)組中塞耕,此時(shí)數(shù)組的的索引最大值為2

當(dāng)我們松開第一個(gè)手指,那么就要把數(shù)組中的索引為0的元素剔除嘴瓤,此時(shí)index就是0.

當(dāng)我們松開第二個(gè)手指扫外,那么就要把數(shù)組中的索引為0的元素剔除,此時(shí)index就是0.

當(dāng)我們松開第三個(gè)手指廓脆,那么就要把數(shù)組中的索引為0的元素剔除筛谚,此時(shí)index就是0.

對,以上幾行我沒有寫錯(cuò)停忿。

你看明白了嗎驾讲? 親??

好了;分析到此結(jié)束席赂,

這個(gè)時(shí)候你再去看

getaction = getactionindex+getactionmasked(當(dāng)然我這么寫不太準(zhǔn)確)因?yàn)樗麄兪歉?位與低八位的組合吮铭。

但是你再回頭看這幾個(gè)函數(shù)相信你能看懂的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末颅停,一起剝皮案震驚了整個(gè)濱河市谓晌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌癞揉,老刑警劉巖纸肉,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異喊熟,居然都是意外死亡柏肪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門芥牌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來预吆,“玉大人,你說我怎么就攤上這事胳泉」詹妫” “怎么了岩遗?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長凤瘦。 經(jīng)常有香客問我宿礁,道長,這世上最難降的妖魔是什么蔬芥? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任梆靖,我火速辦了婚禮,結(jié)果婚禮上笔诵,老公的妹妹穿的比我還像新娘返吻。我一直安慰自己,他們只是感情好乎婿,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布测僵。 她就那樣靜靜地躺著,像睡著了一般谢翎。 火紅的嫁衣襯著肌膚如雪捍靠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天森逮,我揣著相機(jī)與錄音榨婆,去河邊找鬼。 笑死褒侧,一個(gè)胖子當(dāng)著我的面吹牛良风,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播闷供,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼拖吼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了这吻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤篙议,失蹤者是張志新(化名)和其女友劉穎唾糯,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鬼贱,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡移怯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了这难。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舟误。...
    茶點(diǎn)故事閱讀 38,064評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖姻乓,靈堂內(nèi)的尸體忽然破棺而出嵌溢,到底是詐尸還是另有隱情眯牧,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布赖草,位于F島的核電站学少,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏秧骑。R本人自食惡果不足惜版确,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望乎折。 院中可真熱鬧绒疗,春花似錦、人聲如沸骂澄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽酗洒。三九已至士修,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間樱衷,已是汗流浹背棋嘲。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留矩桂,地道東北人沸移。 一個(gè)月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像侄榴,于是被迫代替她去往敵國和親雹锣。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評論 2 345