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

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