Himi 原創(chuàng), 歡迎轉(zhuǎn)載,轉(zhuǎn)載請?jiān)诿黠@處注明! 謝謝。
原文地址: http://blog.csdn.net/xiaominghimi/archive/2011/01/12/6130196.aspx
本文補(bǔ)充: 網(wǎng)上很多關(guān)于手勢文章都說Android 對手勢的支持是從SDK 1.6 (也就是 API 4)才開始的,但是我用SDK1.5模擬器也能識別!。(本想測試下更低的SDK的支持效果,但是我沒有SDK低于1.5版本的....我手機(jī)SDK 2.2的 - -、),所以查了Api 發(fā)現(xiàn):
android.view.GestureDetector.OnGestureListener; since api-1 ,
android.view.GestureDetector; since api-1 ,
從API來看從api-1開始就已經(jīng)支持手勢和手勢監(jiān)聽器了,那么很多說api-4才支持這句話也沒錯!因?yàn)椋? android.gesture 這個類是從 api-4 才開始支持的,這個類 輸入法手勢識別 中會用到!so~
結(jié)論:觸摸屏手勢識別 是從API-1 就開始支持了。 而 輸入法手勢識別 是API-4才開始支持的!這里要搞清楚!
對于Android 的手勢不光在軟件中會經(jīng)常用到,比如瀏覽器中的翻頁,滾動頁面等等;當(dāng)然其實(shí)在我們開發(fā)Android游戲的時(shí)候加上了Android手勢操作更會讓游戲增加一個亮點(diǎn),比如一般的CAG ,PUZ等類型的游戲選擇關(guān)卡啦、簡單背景的移動啦,都可以使用手勢來操作即可,類似前段時(shí)間很火的《讓人憤怒的小鳥!》咳咳、不好意思說錯了,是《憤怒的小鳥》,因?yàn)榭偸锹犎豪锇?,朋友啊說小鳥出新版本啦,小鳥出PC硬盤版啦! 唉~你說可讓人憤怒,其實(shí)說實(shí)話,小鳥這個游戲確實(shí)不錯,我所看到的唯一的亮點(diǎn)是這款游戲的創(chuàng)意!說實(shí)話,現(xiàn)在的游戲沒有做不出來的只有想不出來的好創(chuàng)意、咳咳?;氐皆掝}來,那么下面我們來稍微了解下什么是Android 手勢!
所謂手勢操作,類似跳舞機(jī)、EZdancer~這些利用不同動作和音符讓人手舞足蹈一樣,那么Android這里的手勢只是讓我們在游戲和軟件中的操作有了更多的花樣和玩法,根據(jù)玩家接觸屏幕時(shí)間的長短,在屏幕上滑動的距離,按下抬起的時(shí)間等進(jìn)行了包裝,其實(shí)就是Android 對觸屏處理做了包裝和處理。
那么在Android中其實(shí)有兩種手勢識別技術(shù)。一種是 觸摸屏手勢識別 ,另一種是 輸入法手勢識別 ;兩者比較起來第二種比較靈活,可以自定義手勢,比較high!那么這一節(jié)我們先來介紹第一種手勢識別: 觸摸屏手勢識別; 在下篇博文中我會給童鞋們講解 輸入法手勢識別 !
先把兩張截圖放上來吧:
OK,老方式,先上代碼:
MySurfaceView.java
補(bǔ)充一下: 代碼初始化手勢的時(shí)候有這么一句:gd.setIsLongpressEnabled(true);這個函數(shù)標(biāo)識,如果你設(shè)置true的話就是開啟了長按鍵,當(dāng)你長時(shí)間觸屏不動就能得到onLongPress 手勢,如果設(shè)置false 那么你長時(shí)間觸屏不移動也得不到這個手勢的支持~此函數(shù)不設(shè)置也默認(rèn)設(shè)置為true
備注1:
這里我只是給一些不太熟悉這種定義Vector方式的童鞋簡單介紹一下:我們一般定義容器的時(shí)候都是直接 Vector vc =new Vector();嗯,沒錯,但是這種Vector<String>的定義是種泛型定義,那么簡單的說下區(qū)別,如果Vector vc =new Vector();這種方式裝入Object的以后,取的時(shí)候是不是要把取出的進(jìn)行強(qiáng)轉(zhuǎn)一下類型?! 呵呵,而Vector<String>這種定義的時(shí)候就表明了這個容器我只裝String類型的元素,so~取出的時(shí)候也不用再去強(qiáng)轉(zhuǎn)了。
備注2 : 通過測試發(fā)現(xiàn),這里仍然響應(yīng)觸屏?xí)r間,即使你把觸屏焦點(diǎn)設(shè)置成setFocusableInTouchMode(false)也會調(diào)用!?。≡蚴且?yàn)槲覀儽绢惖膙iew綁定了觸屏事件監(jiān)聽器,那么肯定會先響應(yīng) 備注3 ,然后我們 備注4 這里沒有 return true而是直接返給了手勢監(jiān)聽器去監(jiān)聽,讓監(jiān)聽器找合適的函數(shù)來處理用戶的手勢,也就是說沒有標(biāo)志處理完成,所以我們的重寫的onTouchEvent()也會繼續(xù)去處理!
備注5 :
這里注釋的代碼我是在測試兩個動作到底是哪兩個,因?yàn)榫W(wǎng)上介紹Android手勢帖子都瘋傳說:
第一個是MotionEvent.ACTION_DOWN 第二個是MotionEvent.ACTION_MOVE!那么第一個動作是按下好理解是玩家剛觸屏的動作,第二個是move!難道是移動的點(diǎn)都記錄下來了??
其實(shí)測試結(jié)果發(fā)現(xiàn):
第一個是MotionEvent.ACTION_DOWN 第二個是 MotionEvent.ACTION_UP!
唉~現(xiàn)在網(wǎng)上的帖子真是各種抄襲~就不能測試下??郁悶!既然這兩個動作一個是按下一個是抬起那就很明確其意義了,我們可以根據(jù)
這兩個動作知道用戶到底滑動的距離等等了,其距離e2.getX()-e1.getX();
總結(jié):
1.觸屏后、一直觸屏不動、演變順序:onDown->onShowPress->onLongPress;
2.觸屏后、一直觸屏慢移動是onScroll/快移動是onFling 、手指離開屏幕;
注意 :觸屏后、一直觸屏移動,如果手指不離開屏幕一直都是onScroll,不管你移動的速度多快,永遠(yuǎn)不會是onFling!
Ok,手勢雖然挺簡單的,但是如果熟練來使用并且加入游戲中肯定讓你的Game增色不少~
我這里給出源碼:這個實(shí)例我只做了一個手勢的處理,因?yàn)槠渌膭幼鞫己芎唵尾欢嗾f了~OK 各位晚安~
源碼下載地址: http://download.csdn.net/source/2977447
【Android游戲開發(fā)十六】Android Gesture之【觸摸屏手勢識別】操作!利用觸摸屏手勢實(shí)現(xiàn)一個簡單切換圖片的功能!
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
