Android開發(fā)中實(shí)現(xiàn)手勢(shì)識(shí)別功能的方法-創(chuàng)新互聯(lián)

Android開發(fā)中實(shí)現(xiàn)手勢(shì)識(shí)別功能的方法?相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),寧國(guó)企業(yè)網(wǎng)站建設(shè),寧國(guó)品牌網(wǎng)站建設(shè),網(wǎng)站定制,寧國(guó)網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,寧國(guó)網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

觸摸交互中的概念

常用事件

首先要了解一些常用的事件:
ACTION_DOWN:第一個(gè)手指按下
ACTION_UP:第一個(gè)手指抬起
ACTION_POINTER_DOWN:第二、三、四等等手指按下
ACTION_POINTER_UP: 第二、三、四等等手指抬起
ACTION_MOVE: 手指移動(dòng)
ACTION_OUTSIDE:手指移出了屏幕
ACTION_CANCEL:收到前驅(qū)事件比如ACTION_DOWN后,后續(xù)事件被父控件攔截的情況下產(chǎn)生

上面我們可以看到,除了第一個(gè)手指有唯一的action down和action up事件觸發(fā),后續(xù)其它手指的按下和移動(dòng),都觸發(fā)的是同一個(gè)事件。那么這個(gè)時(shí)候就可能涉及到對(duì)不同手指區(qū)分的邏輯處理。

MotionEvent

MotionEvent中用action code和坐標(biāo)值描述了觸摸運(yùn)動(dòng)的軌跡,action code值描述了運(yùn)動(dòng)狀態(tài)的改變,坐標(biāo)值描述了軌跡的位置和一起其它信息。
比如 ACTION_DOWN表明手指開始觸碰到屏幕,X和Y的坐標(biāo)軸值表明了當(dāng)前的位置。

上面僅僅是基本的單指操作,但是現(xiàn)在很多設(shè)備都提供多指操作的功能。多個(gè)手指每個(gè)手指都被在第一次觸碰屏幕的時(shí)候分配一個(gè)pointer id,直到這個(gè)手指離開相應(yīng)的pointer id才變無效。當(dāng)?shù)谝粋€(gè)手指按下時(shí),會(huì)觸發(fā)ACTION_DOWN,ACTION_MOVE一系列的事件,同時(shí)當(dāng)?shù)诙€(gè)手指按下的時(shí)候,又會(huì)觸發(fā) ACTION_POINTER_DOWN事件,此后兩個(gè)手指移動(dòng)的時(shí)候,只會(huì)觸發(fā)ACTION_MOVE事件。當(dāng)一個(gè)ACTION_MOVE觸發(fā)的時(shí),通過使用 getPointerId(第幾個(gè)手指) 方法去獲取pointer id明確是哪一個(gè)手指,然后使用使用findPointerIndex 方法去獲得pointer index,pointer index代表了這一個(gè)MotionEvent事件中哪一個(gè)是當(dāng)前pointer對(duì)應(yīng)的事件。

MotionEvent事件捆綁

結(jié)合上面的概念,再來說一下MotionEvent的捆綁。為了處理效率,安卓中會(huì)把MOVE動(dòng)作中多個(gè)坐標(biāo)點(diǎn)捆綁在一個(gè)MotionEvent中,對(duì)于單個(gè)手指操作,getX返回的是最近一點(diǎn)的坐標(biāo),getHistoricalX 返回的是之前的坐標(biāo)??聪旅嬉欢未a:

 void printSamples(MotionEvent ev) {
   //獲取MotionEvent中捆綁的坐標(biāo)點(diǎn)
   final int historySize = ev.getHistorySize();
   //獲取手指數(shù)目
   final int pointerCount = ev.getPointerCount();
   for (int h = 0; h < historySize; h++) {
     System.out.printf("At time %d:", ev.getHistoricalEventTime(h));
     for (int p = 0; p < pointerCount; p++) {
       System.out.printf(" pointer %d: (%f,%f)",
         ev.getPointerId(p), ev.getHistoricalX(p, h), ev.getHistoricalY(p, h));
     }
   }
 }

當(dāng)前題目:Android開發(fā)中實(shí)現(xiàn)手勢(shì)識(shí)別功能的方法-創(chuàng)新互聯(lián)
URL鏈接:http://muchs.cn/article46/dcjpeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、ChatGPT、關(guān)鍵詞優(yōu)化、手機(jī)網(wǎng)站建設(shè)、外貿(mào)建站App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)