超碰激情 I 成人福利网站 I 淫国产 I 曰批视频免费30分钟成人 I 刘亦菲裸体视频一区二区三区 I 午夜久 I 尤物综合 I 亚洲一区av在线观看 I 欧美亚洲国产精品久久高清 I 欧美老熟妇乱子伦视频 I 无码中出人妻中文字幕av I 久久美女福利视频 I 精品无人区乱码1区2区3区在线 I 性饥渴的农村熟妇 I 色综合综合色 I 少妇人妻88久久中文字幕 I 久久夜色精品国产噜噜av I 老熟妇仑乱视频一区二区 I 男女做爰猛烈叫床视频动态图 I 日本大片一区二区 I 人成午夜免费视频在线观看 I 激情婷婷av I 男女下面一进一出免费视频网站 I 久久影视一区 I 午夜污网站 I 先锋人妻无码av电影 I 久久久久久久岛国免费网站 I 又粗又大又黄又硬又爽免费看 I 人妻无码免费一区二区三区 I www.色成人100 I 欧美高清网站 I 精品国产第一页 I 国产suv一区二区三区88区 I 橹图极品美女无圣光 I 午夜宅男欧美

產(chǎn)品分類(lèi)

當(dāng)前位置: 首頁(yè) > 工業(yè)控制產(chǎn)品 > 自動(dòng)化控制 > 工業(yè)觸摸屏

類(lèi)型分類(lèi):
科普知識(shí)
數(shù)據(jù)分類(lèi):
工業(yè)觸摸屏

解析Android系統(tǒng)多點(diǎn)觸摸屏基本原理

發(fā)布日期:2022-10-09 點(diǎn)擊率:58

    最近想在項(xiàng)目中實(shí)現(xiàn)多指操作,可惜android原生的sdk對(duì)多指的支持不太好,只能自己寫(xiě)了。

    在android的中,MotionEvent event代表的是一個(gè)觸摸事件。我們對(duì)屏幕的幾乎所有操作都會(huì)觸發(fā)該事件,如點(diǎn)擊、放開(kāi)、滑動(dòng)等。不同的事件在MotionEvent中有不同的id,根據(jù)id的不同可以判斷觸摸事件屬于哪個(gè)手指。我們還可以根據(jù)event.getAction() & MotionEvent.ACTION_MASK的結(jié)果來(lái)判斷是何種事件,是ACTION_DOWN、ACTION_UP還是ACTION_MOVE。下面介紹下我們將使用到的五個(gè)操作:

    MotionEvent.ACTION_DOWN:在第一個(gè)點(diǎn)被按下時(shí)觸發(fā)

    MotionEvent.ACTION_UP:當(dāng)屏幕上唯一的點(diǎn)被放開(kāi)時(shí)觸發(fā)

    MotionEvent.ACTION_POINTER_DOWN:當(dāng)屏幕上已經(jīng)有一個(gè)點(diǎn)被按住,此時(shí)再按下其他點(diǎn)時(shí)觸發(fā)。

    MotionEvent.ACTION_POINTER_UP:當(dāng)屏幕上有多個(gè)點(diǎn)被按住,松開(kāi)其中一個(gè)點(diǎn)時(shí)觸發(fā)(即非最后一個(gè)點(diǎn)被放開(kāi)時(shí))。

    MotionEvent.ACTION_MOVE:當(dāng)有點(diǎn)在屏幕上移動(dòng)時(shí)觸發(fā)。值得注意的是,由于它的靈敏度很高,而我們的手指又不可能完全靜止(即使我們感覺(jué)不到移動(dòng),但其實(shí)我們的手指也在不停地抖動(dòng)),所以實(shí)際的情況是,基本上只要有點(diǎn)在屏幕上,此事件就會(huì)一直不停地被觸發(fā)。

    舉例來(lái)講:當(dāng)我們放一個(gè)食指到屏幕上時(shí),觸發(fā)ACTION_DOWN事件;再放一個(gè)拇指到屏幕上,觸發(fā)ACTION_POINTER_DOWN事件;此時(shí)再把食指或拇指放開(kāi),都會(huì)觸發(fā)ACTION_POINTER_UP事件;再放開(kāi)最后一個(gè)手指,觸發(fā)ACTION_UP事件;而同時(shí)在整個(gè)過(guò)程中,ACTION_MOVE事件會(huì)一直不停地被觸發(fā)。

    根據(jù)上面這些原理,就可以判斷在觸摸過(guò)程中有多少個(gè)手指在屏幕上:

    switch (event.getAction() & MotionEvent.ACTION_MASK) {

    case MotionEvent.ACTION_DOWN:

    mode = 1;

    break;

    case MotionEvent.ACTION_UP:

    mode = 0;

    break;

    case MotionEvent.ACTION_POINTER_UP:

    mode -= 1;

    break;

    case MotionEvent.ACTION_POINTER_DOWN:

    mode += 1;

    break;

    }假如現(xiàn)在有兩個(gè)手指在觸摸屏上,可通過(guò)如下方法分別獲得這兩個(gè)觸摸點(diǎn)的位置:

    float x1 = event.getX(0);

    float y1 = event.getY(0);

    float x2 = event.getX(1);

    float y2 = event.getY(2);上面大體就是多指觸摸的基本原理了。要在這個(gè)基礎(chǔ)之上實(shí)現(xiàn)多指觸摸,還有很長(zhǎng)的路要走。

 


下一篇: PLC、DCS、FCS三大控

上一篇: 分析in-cell與on-cell