Android從觸碰屏幕開始的事件采集解析及分發(fā)
1 原始事件信息
打開模擬器, 或者用usb把手機(jī)連接上電腦并打開手機(jī)上面的開發(fā)者模式, (這里為了截圖方便用了模擬器)打開cmd, 輸入adb shell getevent回車, 然后點(diǎn)擊模擬器或者手機(jī)后, 就會(huì)看到有N多行的/dev/input/event......輸出. 其實(shí), 這些信息就是最原始的事件信息.
2 信息分析
cmd重新執(zhí)行adb shell getevent -t -l, 再次點(diǎn)擊手機(jī)的某個(gè)app, 顯示出的信息是這樣的:
是手機(jī)或模擬器開機(jī)后到命令執(zhí)行時(shí)的時(shí)間間隔, 后面顯示的是具體命令, 其中, /dev/input/event1表示的是屏幕的輸入事件, 第一個(gè)ABS_MT_TRACKING_ID 表示采集信息開始, 后一個(gè)ABS_MT_TRACKING_ID表示采集信息結(jié)束, ABS_MT_PRESSURE表示的是屏幕感受到的壓力值, SYN_REPORT 表示的是同步數(shù)據(jù), 最重要的是ABS_MT_POSITION_X和ABS_MT_POSITION_Y, 毫無(wú)疑問(wèn), 這個(gè)就是表示屏幕感受到的觸碰坐標(biāo)位置. 最右邊的一列是16進(jìn)制的值.
其他的信息我們可以先忽略, 最主要的是要記錄時(shí)間和坐標(biāo)點(diǎn), 接下來(lái)就是把采集到的坐標(biāo)點(diǎn)轉(zhuǎn)換成10進(jìn)制的坐標(biāo)點(diǎn), x坐標(biāo)采集到的值是00005487,轉(zhuǎn)換10進(jìn)制是21639, 同理, y坐標(biāo)轉(zhuǎn)換前是00006b5b, 轉(zhuǎn)換后是27483, 接下來(lái)需要根據(jù)公式來(lái)獲取到真正的應(yīng)用層能識(shí)別的坐標(biāo)系, 具體公式為:
手機(jī)像素我們可以通過(guò)代碼獲取當(dāng)前手機(jī)的像素, 但是xmin和xmax, 以及ymin和ymax是什么呢?我們還是通過(guò)cmd用adb shell getevent -p命令來(lái)獲取. 執(zhí)行命令后,拉到最下方, 看到如下圖示:
我們找到0035和0036的行, 即
0035 : value 0, min 0, max 1727, fuzz 0, flat 0, resolution 0
0036 : value 0, min 0, max 1887, fuzz 0, flat 0, resolution 0
0035所在的行就是x信息, 0036所在的行就是y信息, 每行的min值和max值對(duì)應(yīng)上面公式的min和max, 所以我這里最終轉(zhuǎn)換成的x, y坐標(biāo)結(jié)果如下: (我的模擬器經(jīng)過(guò)代碼獲取的寬高分辨率分別是1728, 1888)
x = (19b - 0) * 1728 /(1727-0) = 411 * 1728 / 1727 =
y = (405 - 0) * 1888 / (1887-0) = 405
以上就是Android從觸碰屏幕開始的事件采集解析及分發(fā)的詳細(xì)內(nèi)容,更多關(guān)于Android觸碰屏幕事件采集分發(fā)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
簡(jiǎn)單學(xué)習(xí)Android Socket的使用方法
這篇文章主要幫助大家簡(jiǎn)單學(xué)習(xí)Android Socket的使用方法,感興趣的小伙伴們可以參考一下2016-03-03Android編程之短信竊聽器實(shí)現(xiàn)方法
這篇文章主要介紹了Android編程之短信竊聽器實(shí)現(xiàn)方法,以實(shí)例形式較為詳細(xì)的分析了Android編程實(shí)現(xiàn)竊聽器的具體步驟與實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11簡(jiǎn)單說(shuō)說(shuō)Android中如何使用攝像頭和相冊(cè)
本篇文章主要介紹了簡(jiǎn)單說(shuō)說(shuō)Android中如何使用攝像頭和相冊(cè),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05Android中實(shí)現(xiàn)監(jiān)聽ScrollView滑動(dòng)事件
這篇文章主要介紹了Android中實(shí)現(xiàn)監(jiān)聽ScrollView滑動(dòng)事件,本文用重寫ScrollView類的方法實(shí)現(xiàn)了一些擴(kuò)展功能,需要的朋友可以參考下2015-05-05Android性能優(yōu)化之RecyclerView分頁(yè)加載組件功能詳解
這篇文章主要為大家介紹了Android性能優(yōu)化之RecyclerView分頁(yè)加載組件功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09Android第三方文件選擇器aFileChooser使用方法詳解
這篇文章主要介紹了Android第三方文件選擇器aFileChooser的使用方法詳解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07Android中實(shí)現(xiàn)WebView和JavaScript的互相調(diào)用詳解
這篇文章主要給大家介紹了關(guān)于Android中實(shí)現(xiàn)WebView和JavaScript的互相調(diào)用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友下面來(lái)一起看看吧。2018-03-03Android利用FlexboxLayout輕松實(shí)現(xiàn)流動(dòng)布局
flexbox是屬于CSS的一種布局方案,可以簡(jiǎn)單、完整、響應(yīng)式的實(shí)現(xiàn)各種頁(yè)面布局。谷歌將其引入以提高復(fù)雜布局的能力。下面這篇文章主要給大家介紹了在Android中利用FlexboxLayout輕松實(shí)現(xiàn)流動(dòng)布局的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-04-04Android編程實(shí)現(xiàn)畫板功能的方法總結(jié)【附源碼下載】
這篇文章主要介紹了Android編程實(shí)現(xiàn)畫板功能的方法,結(jié)合實(shí)例形式總結(jié)分析了Android基于自定義View與Canvas類實(shí)現(xiàn)畫板功能的具體操作步驟與相關(guān)注意事項(xiàng),需要的朋友可以參考下2018-02-02