日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

多点触控笔记

發(fā)布時間:2023/12/16 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多点触控笔记 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一.多點觸控的事件類型

單點觸控可以用event.getAction() 獲得觸摸事件的類型:ACTION_DOWN、ACTION_UP、ACTION_MOVE
對于多點觸控呢?

不能再用getAction獲得事件類型,要通過getActionMask獲得(getActionMask是通用的方法,也適用于單點觸控),除了上面那三個事件,還有兩個事件:

ACTION_POINTER_DOWN: 除第一個指針以外進入屏幕的其他指針。
ACTION_POINTER_UP: 除第一個指針以外退出屏幕的其他指針。

也就是說手指A,B:

A按下(DOWN)->B按下(POINTER_DOWN)->A抬起(POINTER_UP)->B抬起(UP)

ACTION_MOVE的事件在多點觸控場景表現(xiàn)不變。

二.多點觸控的區(qū)分

一個MotionEvent就可以包含多個手指的事件,區(qū)分主要依靠兩個概念:
pointerID: 也就是手指的ID,按下到抬起都不會變。通過getPointerId(int index)獲取
pointerIndex: 在這次事件里手指事件的索引,按下到抬起是可能會變的。

比如:手指A,B,C

都依次按下后:
id: 0,1,2
index: 0,1,2

如果中途手指B抬起,AC就變成:
id: 0,2
index: 0,1

三.多點觸控事件的處理

假如getActionMask返回的是POINTER_DOWN或者POINTER_UP,代表這個MotionEvent里面有且只有一個手指是按下或者離開屏幕,可以通過getActionIndex拿到這個事件的索引去處理。

需要注意的是,一個MotionEvent里面也不可能同時出現(xiàn)POINTER_DOWN和POINTER_UP事件。

對個這個event中的剩下手指,都是MOVE事件,代表所有的手指都是在滑動,可以通過getX/Y(int pointerIndex)獲取這個手指滑動的坐標。

四.正向處理容易,反向構(gòu)建難。

手動構(gòu)建MotionEvent的算法并不容易實現(xiàn),在實踐中,雖然能簡單模仿多點觸控,但是還有很多細節(jié)沒有實現(xiàn),除了上面說到的index,id,action等屬性要處理,還要很多一些方法實現(xiàn)是不確定的,比如有g(shù)etHistorical*(int index),獲得歷史坐標值等。

普通簡單的游戲體驗還好,但是像王者榮耀這樣的大型游戲,操作比較復雜,對觸控事件的精細度要求很高,不容易完全模擬,玩起來比較『澀』。

總結(jié)

以上是生活随笔為你收集整理的多点触控笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。