<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 消費電子 > 設(shè)計應(yīng)用 > Android移動應(yīng)用觸摸屏的實現(xiàn)和優(yōu)化方案

          Android移動應(yīng)用觸摸屏的實現(xiàn)和優(yōu)化方案

          作者: 時間:2012-10-19 來源:網(wǎng)絡(luò) 收藏

          近些年來,隨著3G 網(wǎng)絡(luò)的大規(guī)模建設(shè)和智能手機的迅速普及,互聯(lián)網(wǎng)時代已經(jīng)到來。作為Google 推出的一款操作系統(tǒng), 自問世以來就吸引了人們廣泛的關(guān)注,受到眾多廠商和開發(fā)者的青睞。 是一個開放、完整、免費的手機平臺,強大的開源特性吸引了越來越多的開發(fā)者,的版本如今已由最初的1.1 升級到最新的4.0,功能越來越強大,用戶體驗越來越好,在Android 平臺上發(fā)布的產(chǎn)品更加豐富多彩。

          本文引用地址:http://www.ex-cimer.com/article/164823.htm

          Android 平臺上的越來越多,人們對的要求越來越高?,F(xiàn)階段觸屏手機是趨勢,觸摸是人們與應(yīng)用交互的主流方式,人們對觸摸的靈敏度,簡易性和方便度要求越來越高,有必要應(yīng)用的觸摸效果。

          1 Android 平臺的觸摸機制

          一般而言,事件是用戶與UI(圖形界面)進行交互的時候所觸發(fā)的操作。例如在手機屏幕上觸摸特定的區(qū)域就會觸發(fā)對應(yīng)的事件,在Android 中這些事件將被傳送到事件處理器,它是一個專門接受事件對象并對其進行翻譯和處理的方法。

          在 Android 中用戶事件響應(yīng)是很重要的,用戶消息主要來源于3 種硬件外部設(shè)備:觸摸響應(yīng)(ONTouch系列方法)、按鍵響應(yīng)(onKey系列方法)和軌跡球(Trackball)。不論我們是通過觸摸方式與屏幕交互,還是使用軌跡球來交互,任何與屏幕相關(guān)的交互都是與屏幕相應(yīng)位置上的視圖控件的交互?,F(xiàn)在 Android 系統(tǒng)的手機幾乎全是觸屏,基本的按鍵越來越少,響應(yīng)成為發(fā)展的大趨勢,所以在應(yīng)用設(shè)計的時候主要考慮觸摸的效果問題,著重用戶觸摸響應(yīng)。

          Android移動應(yīng)用觸摸屏的實現(xiàn)和優(yōu)化方案

          圖1 Android 平臺用戶消息處理流程

          圖 1 詳細說明了各種用戶操作被系統(tǒng)捕獲的過程。系統(tǒng)捕獲用戶的響應(yīng)后,由Linux 驅(qū)動捕獲用戶的消息,經(jīng)過Android 框架層的AcTIvity Manager 的作用傳遞給Activity中的系統(tǒng)方法,通過執(zhí)行相應(yīng)的系統(tǒng)方法更新View 類,消息傳遞至Application Framework 層,最后調(diào)用Linux 驅(qū)動,控制著界面的繪制和更新。在Android 工程中,觸摸相關(guān)的接口函數(shù)主要封裝在android.view.KeyEvent 類中,寫操控的時候首先導(dǎo)入該類的包,在Activity的子類中對該方法進行說明即可。Android 的事件處理機制相對簡單,對于事件處理機制不必詳細理解,各種響應(yīng)時只需具體各個方法即可,各個方法的具體在View類中進行,下面著重說明Android 平臺觸摸響應(yīng)的實現(xiàn)。

          2 Android 平臺觸摸響應(yīng)的實現(xiàn)

          一般而言在 Android 中,對于觸摸事件的處理如同UI 事件一樣,主要通過兩種方法來處理,一種是利用View 類的onTouchEvent()方法,一種是實現(xiàn)OnTouchLiSTener 接口的onTouch()方法。系統(tǒng)中當(dāng)這兩種方法都存在的前提下,系統(tǒng)將會優(yōu)先采用OnTouchListener接口回調(diào)方法進行處理。一般在簡單的UI 設(shè)計界面重寫onTouchListener()方法,涉及到多個Activity 切換時在方法中實現(xiàn)Activity 信息保存與跳轉(zhuǎn)即可。

          對于大型應(yīng)用而言,界面狀態(tài)比較復(fù)雜,觸摸響應(yīng)需要詳細處理,系統(tǒng)提供了一個專門用于處理用戶觸摸事件的接口函數(shù)onTouchEvent()。實際開發(fā)過程中只需先聲明此接口函數(shù),然后在主View類中重寫該函數(shù)實現(xiàn)具體的觸摸效果即可。下面是接口函數(shù)的聲明:

          觸屏監(jiān)聽方法中只有一個MotionEvent event 參數(shù),此類的實例中保存了玩家觸屏的各種動作,常見的有:按下動作、動作、多點觸屏、屏幕壓力等,在此類中定義了很多動作的靜態(tài)常量值,通過event.getAction()方法獲取玩家的動作與所需動作常量值進行匹配。

          上面是聲音界面的觸摸響應(yīng)處理:event.getAction()是鍵控的類型,是MotionEvent 類的系統(tǒng)方法,獲取當(dāng)前的觸摸響應(yīng)。當(dāng)向下幕時,就響應(yīng)MotionEvent.ACTION_DOWN這個動作,當(dāng)觸點滿足給定的區(qū)間范圍,就執(zhí)行相當(dāng)?shù)牟僮?,實現(xiàn)游戲的狀態(tài)跳轉(zhuǎn)。觸摸范圍在劃分的時候最好以屏幕的相對位置為參考點,這樣在應(yīng)用橫豎屏的處理或者應(yīng)用移植的時候會更方便,避免了頻繁修改參考坐標(biāo)的值。在程序入口處繼承Activity 的子類中可以獲取當(dāng)前設(shè)備屏幕寬和高的具體屬性,這樣觸摸范圍確定時以屏幕的寬和高的屬性值來定位就可以了。整個觸摸部分的流程圖如下:

          Android移動應(yīng)用觸摸屏的實現(xiàn)和優(yōu)化方案

          圖2 觸摸屏操作響應(yīng)的具體流程

          圖 2 顯示的是游戲過程中觸摸屏幕時具體的響應(yīng)流程,主要涉及到Activity 類和View類。在Activity 類中進行觸摸方法onTouchEvent()的聲明,在View 類中對該方法進行詳細定義和說明。當(dāng)觸摸響應(yīng)后,觸發(fā)事件響應(yīng)機制,event 對象通過getAction()方法獲取觸摸響應(yīng),獲得當(dāng)前的觸摸點坐標(biāo)event.getX()和event.getY(),與方法中的觸摸范圍進行判斷,若在區(qū)域內(nèi)則執(zhí)行觸摸響應(yīng)。觸摸響應(yīng)執(zhí)行后需要在觸摸釋放MotionEvent.ACTION_DOWN進行觸摸釋放的處理,及時釋放當(dāng)前的觸摸響應(yīng)。

          3 Android 平臺觸摸響應(yīng)的

          值得注意的是,上面觸摸響應(yīng)MotionEvent.ACTION_DOWN 中,特意定義了一個臨時觸摸計數(shù)變量keyCount,當(dāng)計數(shù)變量加到一定的程度時候才執(zhí)行觸摸響應(yīng)。這樣處理能有效地防止連續(xù)觸摸響應(yīng),觸摸不釋放而直接跳到下一個狀態(tài),觸摸變量的設(shè)置在各個界面跳轉(zhuǎn)過程中尤其是游戲菜單中各界面跳轉(zhuǎn)中是很有必要的。

          觸摸響應(yīng)中除了各個菜單界面的響應(yīng)以外還有一個重要的響應(yīng)就是游戲中對主角的操控。主游戲界面的觸摸響應(yīng)原理和菜單界面是一致的,不同的是觸摸判斷范圍的選取有差異,菜單界面各個觸摸范圍是固定的,而游戲界面觸摸區(qū)域的劃定是動態(tài)的。由于在角色扮演等游戲中主角是核心人物,因此對主角的操控的觸摸響應(yīng)顯得尤其重要,進行觸摸設(shè)計的時候一般以主角為中心進行設(shè)計,以主角的坐標(biāo)作為基本點來判斷。


          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();