摘要:手機(jī)是當(dāng)今使用率很高的移動(dòng)設(shè)備,開發(fā)手機(jī)游戲離不開交互響應(yīng)。針對(duì)按鈕的交互介紹了兩種事件響應(yīng)以及它們的區(qū)別,對(duì)如何實(shí)現(xiàn)按鈕的交互響應(yīng)、如何實(shí)現(xiàn)表單按鈕的交互響應(yīng)、不同的案例應(yīng)采用何種交互方式進(jìn)行了研究。
關(guān)鍵詞:手機(jī)游戲;事件響應(yīng);交互;綁定;接口
DOIDOI:10.11907/rjdk.151153
中圖分類號(hào):TP302
文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):16727800(2015)006005902
作者簡(jiǎn)介作者簡(jiǎn)介:李姝博(1981-),女,遼寧阜新人,碩士,阜新高等專科學(xué)校計(jì)算機(jī)信息技術(shù)系講師,研究方向?yàn)橛螒蜍浖?、?jì)算機(jī)多媒體技術(shù)。
1 按鈕的事件響應(yīng)
通過實(shí)例來(lái)說(shuō)明按鈕事件響應(yīng)的實(shí)現(xiàn)方法:制作輸入短信的界面,實(shí)現(xiàn)編輯短信的功能,并設(shè)有刪除按鈕,即單擊刪除按鈕實(shí)現(xiàn)刪除的功能。
首先制作界面,在界面上添加對(duì)象,應(yīng)該注意的是按鈕不能直接放到界面上,要先將其放到TextBox的對(duì)象tb上,然后通過tb放到界面上,這時(shí)單擊按鈕沒有任何作用。此時(shí)按鈕還不能做事情,也就是說(shuō)不能響應(yīng)事件,只有具有一定事件響應(yīng)功能的命令按鈕才有實(shí)際作用。
1.1 實(shí)現(xiàn)事件監(jiān)聽機(jī)制
所謂實(shí)現(xiàn)事件監(jiān)聽機(jī)制就是讓按鈕所在的類實(shí)現(xiàn)事件響應(yīng)[1],也就是在該類上添加一個(gè)“耳朵”,能監(jiān)聽到有人單擊按鈕。這個(gè)“耳朵”就是按鈕的事件響應(yīng)接口,即CommandListener。具體做法:編寫一個(gè)類去實(shí)現(xiàn)這個(gè)監(jiān)聽接口,即在這個(gè)類上加一個(gè)“耳朵”:
public class 類名 implements CommandListener{}
實(shí)現(xiàn)事件響應(yīng)接口還有一個(gè)簡(jiǎn)單的做法:眾所周知,Java支持一個(gè)類單重繼承并實(shí)現(xiàn)多個(gè)接口,所以不必重新編寫類,只要在原來(lái)類的基礎(chǔ)上實(shí)現(xiàn)接口就可以了,即在原來(lái)類頭后面直接加上 implements CommandListener即可。
1.2 接口功能設(shè)計(jì)
接口是抽象的,要想實(shí)現(xiàn)接口功能,還得仰仗接口中的方法,因此需要將接口中的方法重寫,也就是要把接口中所有的函數(shù)都重新寫到接口的類里。CommandListener接口中有一個(gè)CommandAction(Command c ,Displayable d)函數(shù),需要將這個(gè)函數(shù)寫到上面的類中,實(shí)際操作中不需要我們?nèi)?,?dāng)完成上一步添加完接口之后,在類頭會(huì)出現(xiàn)錯(cuò)誤信息,單擊錯(cuò)誤信息之后會(huì)顯示“添加未實(shí)現(xiàn)的方法”,單擊即可把CommandAction添加到類中,如圖1所示。
在這個(gè)函數(shù)中有兩個(gè)參數(shù),第一個(gè)參數(shù)表示發(fā)出事件的Command按鈕,就是用戶按了哪個(gè)按鈕,第二個(gè)參數(shù)表示發(fā)出事件的Displayable對(duì)象。Command是依附于Displayable的,因此,在事件處理類中,不但可以處理事件,還可以知道事件是由哪個(gè)Command按鈕發(fā)出,以及該Command按鈕所在的Displayable對(duì)象。
1.3 將事件源和事件響應(yīng)對(duì)象綁定
事件編寫完后,只是能夠處理事件,并不能保證Command按鈕單擊后會(huì)觸發(fā)事件,因此還需要將Command按鈕和事件處理類(CommandListener)進(jìn)行綁定。由于Command是依附于Displayable的,因此,綁定工作可由Displayable的對(duì)象tb來(lái)完成,即tb.setCommandListener(this)。
1.4 具體事件編寫
前3步都完成之后,該程序應(yīng)該可以和用戶進(jìn)行交互了。但是交互的具體內(nèi)容是什么,用戶具體要讓程序?qū)崿F(xiàn)什么功能,去完成什么任務(wù),是本步驟要實(shí)現(xiàn)的。單擊刪除按鈕實(shí)現(xiàn)刪除功能,完成這個(gè)功能的語(yǔ)句寫到哪里?前面已經(jīng)提到,需要寫到CommandAction(Command c ,Displayable d)函數(shù)中,具體代碼如下[2]:
這就是按鈕事件響應(yīng)的全過程,只要是單擊按鈕實(shí)現(xiàn)功能就需要完成以上4個(gè)步驟。對(duì)于不同案例,前3個(gè)步驟基本不變,變化的只是具體事件。
2 表單元素事件響應(yīng)
表單的事件響應(yīng)有兩種:表單元素按鈕事件響應(yīng),即ItemCommand事件;表單元素狀態(tài)改變事件響應(yīng),即ItemState事件。
2.1 ItemCommand事件響應(yīng)
同樣,本文通過實(shí)例來(lái)說(shuō)明ItemCommand事件響應(yīng)實(shí)現(xiàn)方法。
制作一個(gè)QQ登陸界面,QQ號(hào)文本框被激活后,選擇左下角的“清除內(nèi)容”按鈕,就能在QQ號(hào)框中清除光標(biāo)前的字符;密碼文本框被激活之后,同樣選擇右下角的“清除內(nèi)容”按鈕,就能在密碼框中清除光標(biāo)前的字符。同樣是按鈕的交互,該案例能不能用上面的按鈕事件響應(yīng)方法去實(shí)現(xiàn)呢?答案是否定的,因?yàn)楸纠?,雖然有一個(gè)命令按鈕“清除內(nèi)容”,但是該命令按鈕所作的事情和具體的文本框有關(guān),通過CommandListener雖然可以知道是哪一個(gè)命令按鈕被選擇,卻無(wú)法知道當(dāng)前光標(biāo)在哪個(gè)文本框內(nèi),也就無(wú)法確定到底要清除誰(shuí)的內(nèi)容。
由此可見,該實(shí)例可以使用表單元素的事件響應(yīng),通過它可以進(jìn)行此處的事件響應(yīng)處理。具體實(shí)現(xiàn)和按鈕的事件響應(yīng)很類似,也要經(jīng)過四步,這里做簡(jiǎn)要敘述,重點(diǎn)介紹兩者的區(qū)別。
2.1.1 寫事件處理類
實(shí)現(xiàn)Javax.microedition.lcdui. ItemCommandListener;(簡(jiǎn)單的方法是直接在類頭的后面加上兩個(gè)單詞:Implements ItemCOmmandListener)。
2.1.2 重寫ItemCommandListener中的CommandAction方法
CommandAction(Command c ,item i),特別地,前面分析的按鈕事件響應(yīng)中該函數(shù)的第二個(gè)參數(shù)是Displayable,而在此是item,這就是主要的區(qū)別,也就是通過這個(gè)函數(shù)能解決前面所說(shuō)的按鈕事件響應(yīng)不能解決的問題,即:“通過CommandListener雖然可以知道是哪一個(gè)命令按鈕被選擇,卻無(wú)法知道當(dāng)前光標(biāo)在哪個(gè)文本框內(nèi),也就無(wú)法確定到底要清除誰(shuí)的內(nèi)容”,所以該案例必須用表單的事件響應(yīng)去解決。
2.1.3 將事件源和事件響應(yīng)對(duì)象綁定
在本例中即為TextField和ItemCommandListener綁定。具體做法:
tf1. setItemCommandListener(this)
tf2. setItemCommandListener(this)
因?yàn)檫@里有兩個(gè)文本框,所以綁定時(shí)要注意一定是兩個(gè)TextField的對(duì)象分別和該類綁定。
2.1.4 具體事件的實(shí)現(xiàn)
值得注意的是,CommandAction(Command cmd ,item item)方法中的兩個(gè)參數(shù)是做了修改的,即變?yōu)镃ommandAction(Command c ,item i)。
這就是表單按鈕的事件響應(yīng)實(shí)現(xiàn)方法,與按鈕的事件響應(yīng)的主要區(qū)別在于第二步,也正是因?yàn)榈诙街泻瘮?shù)的參數(shù)不同,實(shí)現(xiàn)功能也就不同。
2.2 ItemState事件
ItemState事件相當(dāng)于在Item的狀態(tài)發(fā)生改變時(shí)發(fā)出命令。例如,制作一個(gè)短信發(fā)送界面,在界面中,首先出現(xiàn)的是短信編輯界面,界面左下方有一個(gè)“返回”按鈕,點(diǎn)擊后能夠返回到歡迎界面;當(dāng)在文本框中輸入短信后,左下方的按鈕自動(dòng)變?yōu)椤扒宄谋尽?,可以將光?biāo)左邊的文本清除。這里的“返回”按鈕變?yōu)椤扒宄谋尽卑粹o就是應(yīng)用ItemState事件來(lái)實(shí)現(xiàn)的。簡(jiǎn)單做法如下。
2.2.1 寫事件處理類
3 結(jié)語(yǔ)
無(wú)論是怎樣的事件響應(yīng),都應(yīng)該先制作界面,然后按步驟去實(shí)現(xiàn)按鈕的交互。制作界面應(yīng)注意的是:按鈕事件響應(yīng)中的按鈕是放在Displayable類上的,而表單按鈕的事件響應(yīng)按鈕一定要放到表單(Item)上[3],綁定也是有所區(qū)別的。用戶在應(yīng)用這兩種事件響應(yīng)時(shí)應(yīng)多加注意,以免達(dá)不到理想效果。
參考文獻(xiàn):
[1] 高宇航,王琨,袁世雄.注重用戶體驗(yàn)的觸屏手機(jī)交互設(shè)計(jì)研究[J].黑龍江科學(xué),2014(4):261262.
[2] 郭克華.Java ME 移動(dòng)開發(fā)實(shí)例精講[M].北京:清華大學(xué)出版社,2011.
[3] 陳燕.基于Android平臺(tái)的UX手機(jī)交互主題的設(shè)計(jì)與實(shí)現(xiàn)[J].電腦開發(fā)與應(yīng)用,2014(5):6063.
責(zé)任編輯(責(zé)任編輯:杜能鋼)