久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Android應(yīng)用程序----界面事件(觸摸事件)

 松林園 2021-05-14

Android界面框架支持對(duì)觸摸事件的監(jiān)聽(tīng),并能夠?qū)⒂|摸事件的詳細(xì)信息傳遞給處理函數(shù) 

需要設(shè)置觸摸事件的監(jiān)聽(tīng)器,,并重載onTouch ()函數(shù)


1行代碼是設(shè)置控件的觸摸事件監(jiān)聽(tīng)器 

在代碼第3行的onTouch()函數(shù)中,,第1個(gè)參數(shù)View表示產(chǎn)生觸摸事件的界面控件;第2個(gè)參數(shù)MontionEvent表示觸摸事件的詳細(xì)信息,,如產(chǎn)生時(shí)間,、坐標(biāo)和觸點(diǎn)壓力等

5行是onTouch()函數(shù)的返回值


TouchEventDemo是一個(gè)說(shuō)明如何處理觸摸事件的示例 

TouchEventDemo用戶界面 

淺藍(lán)色區(qū)域是可以接受觸摸事件的區(qū)域,用戶可以在Android模擬器中使用鼠標(biāo)點(diǎn)擊屏幕,,用以模擬觸摸手機(jī)屏幕 

下方黑色區(qū)域是顯示區(qū)域,,用來(lái)顯示觸摸事件的類型、相對(duì)坐標(biāo),、絕對(duì)坐標(biāo),、觸點(diǎn)壓力,、觸點(diǎn)尺寸和歷史數(shù)據(jù)量等信息

在用戶界面中使用了線性布局,并加入了3個(gè)TextView控件 

1個(gè)TextViewIDtouch_area)用來(lái)標(biāo)識(shí)觸摸事件的測(cè)試區(qū)域 

2個(gè)TextViewIDhistory_label)用來(lái)顯示觸摸事件的歷史數(shù)據(jù)量 

3個(gè)TextViewIDevent_label)用來(lái)觸摸事件的詳細(xì)信息,,包括類型,、相對(duì)坐標(biāo)、絕對(duì)坐標(biāo),、觸點(diǎn)壓力和觸點(diǎn)尺寸


XML文件的代碼如下

9代碼定義了TextView的背景顏色,,#80A0FF是顏色代碼

10代碼定義了TextView的字體顏色


在代碼中為了能夠引用XML文件中聲明的界面元素,使用了下面的代碼


當(dāng)手指接觸到觸摸屏,、在觸摸屏上移動(dòng)或離開(kāi)觸摸屏?xí)r,,分別會(huì)引發(fā)ACTION_DOWNACTION_UPACTION_MOVE觸摸事件,,而無(wú)論是哪種觸摸事件,,都會(huì)調(diào)用onTouch()函數(shù)進(jìn)行處理 

事件類型包含在onTouch()函數(shù)的MotionEvent參數(shù)中,可以通過(guò)getAction()函數(shù)獲取到觸摸事件的類型,,然后根據(jù)觸摸事件的不同類型進(jìn)行不同的處理

為了能夠使屏幕最上方的TextView處理觸摸事件,,需要使用setOnTouchListener()函數(shù)在代碼中設(shè)置觸摸事件監(jiān)聽(tīng)器,并在onTouch()函數(shù)添加觸摸事件的處理過(guò)程


7行代碼的Display()是一個(gè)自定義函數(shù),,主要用來(lái)顯示觸摸事件的詳細(xì)信息,,函數(shù)的代碼和含義將在后面進(jìn)行介紹 

10行代碼的ProcessHistory()也是一個(gè)自定義函數(shù),用來(lái)處理觸摸事件的歷史數(shù)據(jù),,后面進(jìn)行介紹 

11行代碼是使用TextView顯示歷史數(shù)據(jù)的數(shù)量


MotionEvent參數(shù)中不僅有觸摸事件的類型信息,,還觸點(diǎn)的坐標(biāo)信息,獲取方法是使用getX()getY()函數(shù),,這兩個(gè)函數(shù)獲取到的是觸點(diǎn)相對(duì)于父界面元素的坐標(biāo)信息,。如果需要獲取絕對(duì)坐標(biāo)信息,則可使用getRawX()getRawY()函數(shù) 

觸點(diǎn)壓力是一個(gè)介于01之間的浮點(diǎn)數(shù),,用來(lái)表示用戶對(duì)觸摸屏施加壓力的大小,,接近0表示壓力較小,接近1表示壓力較大,,獲取觸摸事件觸點(diǎn)壓力的方式是調(diào)用getPressure()函數(shù) 

觸點(diǎn)尺寸指用戶接觸觸摸屏的接觸點(diǎn)大小,,也是一個(gè)介于01之間的浮點(diǎn)數(shù),接近0表示尺寸較小,,接近1表示尺寸較大,,可以使用getSize()函數(shù)獲取


Display()MotionEvent參數(shù)參數(shù)中的事件信息提取出來(lái),并顯示在用戶界面上


一般情況下,,如果用戶將手指放在觸摸屏上,,但不移動(dòng),然后抬起手指,應(yīng)先后產(chǎn)生ACTION_DOWNACTION_UP兩個(gè)觸摸事件 

但如果用戶在屏幕上移動(dòng)手指,,然后再抬起手指,,則會(huì)產(chǎn)生這樣的事件序列ACTION_DOWN ACTION_MOVE ACTION_MOVE ACTION_MOVE ……ACTION_UP


在手機(jī)上運(yùn)行的應(yīng)用程序,效率是非常重要的,。如果Android界面框架不能產(chǎn)生足夠多的觸摸事件,,則應(yīng)用程序就不能夠很精確的描繪觸摸屏上的觸摸軌跡 

如果Android界面框架產(chǎn)生了過(guò)多的觸摸事件,雖然能夠滿足精度的要求,,但卻降低了應(yīng)用程序效率

Android界面框架使用了“打包”的解決方法,。在觸點(diǎn)移動(dòng)速度較快時(shí)會(huì)產(chǎn)生大量的數(shù)據(jù),每經(jīng)過(guò)一定的時(shí)間間隔便會(huì)產(chǎn)生一個(gè)ACTION_MOVE事件,,在這個(gè)事件中,,除了有當(dāng)前觸點(diǎn)的相關(guān)信息外,,還包含這段時(shí)間間隔內(nèi)觸點(diǎn)軌跡的歷史數(shù)據(jù)信息,,這樣既能夠保持精度,又不至于產(chǎn)生過(guò)多的觸摸事件,。


通常情況下,,在ACTION_MOVE的事件處理函數(shù)中,都先處理歷史數(shù)據(jù),,然后再處理當(dāng)前數(shù)據(jù)


3行代碼獲取了歷史數(shù)據(jù)的數(shù)量 

然后在第4行至12行中循環(huán)處理這些歷史數(shù)據(jù) 

5行代碼獲取了歷史事件的發(fā)生時(shí)間 

6行代碼獲取歷史事件的觸點(diǎn)壓力 

7行和第8行代碼獲取歷史事件的相對(duì)坐標(biāo) 

9行獲取歷史事件的觸點(diǎn)尺寸 

在第14行返回歷史數(shù)據(jù)的數(shù)量,,主要是用于界面顯示 

Android模擬器并不支持觸點(diǎn)壓力和觸點(diǎn)尺寸的模擬,所有觸點(diǎn)壓力恒為1.0,,觸點(diǎn)尺寸恒為0.0

同時(shí)Android模擬器上也無(wú)法產(chǎn)生歷史數(shù)據(jù),,因此歷史數(shù)據(jù)量一直顯示為0

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多