j2medev“用户界面和多媒体”版面问题整理[0407更新]
| 出品商 | 產(chǎn)品名稱 | 產(chǎn)品版本 |
| J2medev.com | 版面有價(jià)值的問(wèn)題合集 | 0.1 |
j2medev.com之“用戶界面和多媒體”版面
有價(jià)值問(wèn)題的整理
歷史
| Version | Date | Creator | Description |
| 1.0.0.1 | 2006-4-4 | 鄭昀 | 草稿 |
| 1.0.0.2 | 2006-4-6 | 鄭昀 | 第二稿 |
?
1?全屏問(wèn)題
?
全屏/FullCanvas/setFullScreenMode
| 關(guān)鍵詞 | 詳細(xì)描述 | ? | |
| SonyEricsson T630 | 該款手機(jī)的參數(shù):索尼愛(ài)立信?T630 SonyEricssonT630R401 ProfileMIDP-1.0 ConfigurationCLDC-1.0。 “據(jù)我所知,不可以實(shí)現(xiàn)全屏顯示。” --- lulei204 | ? | |
| SonyEricsson K700c | k700c??直接用nokia的FullCanvas,可以全屏176 x 220。 k700c用midp2.0的那個(gè)this.setFullScreenMode(true);也是可以全屏的,176x220。 k700c直接用nokia的FullCanvas全屏好像是176*208,直接拿nokia60上的程序可以直接放進(jìn)去。鍵值和60的也是相同的,只是多了一個(gè)返回鍵,我忘了值是多少了。用2.0的GameCanvas大小是176*220。 --- lulei204 | ? | |
| 不使用FullCanvas實(shí)現(xiàn)全屏的方法 | 為了用標(biāo)準(zhǔn)的SUN WTK2.1開(kāi)發(fā)能兼容各種機(jī)型的MIDP2.0游戲,會(huì)遇到一個(gè)奇怪的全屏問(wèn)題,在K700上好好的,到了Nokia上居然死活顯示一半,費(fèi)了一番功夫后,終于不用FullCanvas實(shí)現(xiàn)了兼容K700和Nokia的全屏顯示,方法如下: 在索愛(ài)的K700上,實(shí)現(xiàn)全屏很簡(jiǎn)單,如下寫法就可以了: public Canvas1() {?????????super(false); ????????this.setFullScreenMode(true); ????????this.width=getWidth(); ????????this.height=getHeight(); }?得到的屏幕大小是176*220。 Nokia上就比較奇怪了,這種方式取得的width和height居然是176*144。 需要加以下代碼修正一下: if(width>=176) {?????if(height<208) ????{ ?????????height=208; ????} }?繪圖部分都以width和height為基準(zhǔn)。 另外canvas1不能繼承系統(tǒng)的GameCanvas,因?yàn)橄到y(tǒng)GameCanvas里的緩沖圖還是176*144的,畫出來(lái)就只能是半屏,我用j2me polish里的GameCanvas修改一下后,放到src里代替系統(tǒng)GameCanvas就OK了。 修正過(guò)的GameCanvas代碼如下: http://www.j2medev.com/bbs/dispbbs.asp? BoardID=19&ID=3218&replyID=&skin=1 ---alexhy | ||
| FullCanvas和setFullScreenMode()的區(qū)別 | setFullScreenMode用于MIDP2.0設(shè)備上。com.nokia.mid.ui.FullCanvas是Nokia UI API 1.1的包,用于MIDP2.0設(shè)備上,SonyEricsson手機(jī)也支持。 ? “FullCanvas是肯定可以實(shí)現(xiàn)全屏幕顯示的,但是MIDP2.0里面的setFullScreenMode()只是實(shí)現(xiàn)為盡量使用最大的屏幕空間,但是不一定是全屏幕,要看各個(gè)手機(jī)的實(shí)現(xiàn)。” ---mingjava “FullCanvas不能加Command;setFullScreenMode(true)可以加上Command()。只是我加上一個(gè)按鍵時(shí),卻不管把它設(shè)在哪里,只能是右鍵響應(yīng)。” ---風(fēng)過(guò)留痕 | ||
| FullCanvas和Canvas,GameCanvas分別有什么不同 | “FullCanvas是Canvas的子類,實(shí)現(xiàn)全屏的功能,而且把按鍵針對(duì)nokia的手機(jī)進(jìn)行了映射。其他沒(méi)有什么區(qū)別。” ---migjava “GameCanvas也是Canvas的子類,自MIDP2.0起提供,專門針對(duì)游戲增加了一些功能。在按鍵和顯示各方面的運(yùn)用都和Canvas有較大的不同。” ---efei | ||
| Motorola的MIDP1.0手機(jī) | “motorola如果不支持MIDP2.0,應(yīng)該就沒(méi)辦法實(shí)現(xiàn)全屏了。全屏下的菜單很好實(shí)現(xiàn),不用搞得象Command那么復(fù)雜,那個(gè)Command用起來(lái)就是很不爽,還是自己寫最好。” ---海標(biāo) | ||
| Nokia S60全屏后的Canvas高度 | “canvas. setFullScreenMode(true)后,一定讓他被繪制一次,系統(tǒng)會(huì)調(diào)用sizechange(int w,int h),w、h肯定是全屏的。僅調(diào)用setFullScreenMode (true)則好象各系統(tǒng)有不同處理。” ---atchome ? “You can call getWidth() getHeight() after Canvas.showNotify(). Then it will return the correct value. eg. 176*208” --- okboy001 ? “系統(tǒng)第一次回調(diào)paint()方法時(shí)可以獲得正確的屏幕尺寸 原因如atchome所說(shuō)” --- imshark_jinni ? “在Nokia S60真機(jī)上這是一個(gè)BUG似乎: setFullScreenMode(true);調(diào)用之后, getHeight()返回的并不是全屏后的高度,比如他本應(yīng)該返回208, 但是他卻返回144,所以,在真機(jī)測(cè)試時(shí)也要小心nokia s60的這個(gè)bug, 不要因?yàn)槠聊桓叨全@取不正確,導(dǎo)致fillRect與你預(yù)想不一致。 ? 以上這個(gè)BUG,起碼我的Nokia 7610就是這樣。 所以我必須在setFullScreenMode(true);全屏之后 通過(guò)下面代碼來(lái)獲取真實(shí)的canvas高度: ? Code: public abstract class PopupCanvas extends Canvas { 。。。。 /* ??????????*?針對(duì)Nokia全屏情況下getHeight的BUG,此函數(shù)出自于 ??????????* http://discussion.forum.nokia.com/f...?threadid=48826 ??????????*/ ?????????public int getHeight(){ ????????????????try{ ???????????????????????if("Nokia".compareTo( System.getProperty("microedition.platform").substring(0,5)) ?== 0) ??????????????????????????????return 208; ???????????????????????else ??????????????????????????????return super.getHeight(); ????????????????} ????????????????catch(Exception e){ ???????????????????????return super.getHeight(); ????????????????} ??????????????} }” ---zhengyun | ? | |
?
2 Image和ByteArray轉(zhuǎn)換問(wèn)題
?
Image/byte[]/Convert
| 關(guān)鍵詞 | 詳細(xì)描述 | |
| Image對(duì)象轉(zhuǎn)換為byte[] | “image-(getGraphics)->graphic-(setClip,?對(duì)每個(gè)象素getColor)->原始byte[]” --- rypan ? “要是在?J2ME?的話,?看來(lái)只有?Image.getRGB()?能幫上: 還有做int[] -> byte[]?的動(dòng)作,?可以考慮用?ByteArrayOutputStream + DataOutputStream,?把?int[]?用?dos.writeInt?的方法寫在?Byte array上. 當(dāng)然可以用最老土的方法,?不知道那種快: byteArray[i] = intArray[j] & 0xFF; byteArray[i+1] = (intArray[j] >> 8)& 0xFF; byteArray[i+2] = (intArray[j] >> 16)& 0xFF; byteArray[i+3] = (intArray[j] >> 24)& 0xFF;” --- wapeter ? “ public static byte[] getByteArray(Image image) { ???????int raw[] = new int[image.getWidth() * image.getHeight()]; ???????image.getRGB(raw, 0, image.getWidth(), 0, 0, ??????????????image.getWidth(), image.getHeight()); ???????byte rawByte[] = new byte[image.getWidth() * image.getHeight() * 4]; ???????int n = 0; ???????for(int i = 0; i < raw.length; i++) ???????{ ??????????????int ARGB = raw[i]; ??????????????int a = (ARGB & 0xff000000) >> 24; ??????????????int r = (ARGB & 0xff0000) >> 16; ??????????????int g = (ARGB & 0xff00) >> 8; ??????????????int b = ARGB & 0xff; ??????????????rawByte[n] = (byte)b; ??????????????rawByte[n + 1] = (byte)g; ??????????????rawByte[n + 2] = (byte)r; ??????????????rawByte[n + 3] = (byte)a; ??????????????n += 4; ???????} ?????? ???????raw = null; ???????return rawByte; } ? 上面代碼進(jìn)一步的解釋: ? 第一步: 如何獲得image對(duì)象的int數(shù)組呢?這個(gè)就簡(jiǎn)單了可以通過(guò)獲得RGB數(shù)組就可以。Image對(duì)象中有直接的getRGB方法,不過(guò)這里的參數(shù)的位置和J2SE中不太一樣: javax.microedition.lcdui.Image.getRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height) 第一個(gè)是目標(biāo)數(shù)組,第二個(gè)是偏移量,第三個(gè)是掃描的長(zhǎng)度,后兩個(gè)是起始的位置,最后兩個(gè)是要取得的寬度和高度。其中掃描的長(zhǎng)度一般大于等于獲取的寬度。 ? 第二步,把得到的Int數(shù)組再生成byte數(shù)組。 “???byteArray[i+0] = (rgbArray[i/4] >> 24); ???byteArray[i+1] = (rgbArray[i/4] >> 16) & 0x000000FF; ???byteArray[i+2] = (rgbArray[i/4] >>??8) & 0x000000FF; ???byteArray[i+3] = rgbArray[i/4] & 0x000000FF; ” 第一句,alpha channel; 第二句,red channel; 第三句,green channel; 第四句,blue channel。 ? 為什么有這些東西呢? 我們從一篇文章《介紹MIDP2.0新特性Alpha混合》摘要幾句: [quote] 在MIDP2.0中新增了Alpha混合特性...MIDP2.0 java doc中關(guān)于Alpha Processing的說(shuō)明:在可修改圖片中的每個(gè)像素都必須是完全模糊的,在不可修改圖片中的每個(gè)像素可以是完全透明的,完全模糊的或者介于兩者之間的,也就是半透明... [/quote] ? 所以有了上面的Alpha channel。 ? [quote] 數(shù)組中的數(shù)值形式為0xAARRGGBB,其中AA代表透明度,后面的代表顏色值。 [/quote] 也就是說(shuō),AA就是Alpha,RR就是Red,GG就是Green,BB就是Blue。 ? 還有一句話概括的: [quote]444,表示圖形格式,好像Nokia S40的機(jī)器都是采用444格式表示RGB顏色的。就是紅,綠,藍(lán)各用4位表示,至于可以表示透明色ARGB的4444格式,應(yīng)該是機(jī)器硬件實(shí)現(xiàn)的。[/quote]” ---zhengyun ? | |
| ? | ? | |
?
3 getRGB問(wèn)題
?
getRGB/
| 關(guān)鍵詞 | 詳細(xì)描述 | |
| getRGB的參數(shù)意義 | “javax.microedition.lcdui.Image.getRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height) 第一個(gè)是目標(biāo)數(shù)組,第二個(gè)是偏移量,第三個(gè)是掃描的長(zhǎng)度,后兩個(gè)是起始的位置,最后兩個(gè)是要取得的寬度和高度。其中掃描的長(zhǎng)度一般大于等于獲取的寬度。” --?whycloud ? “offset?是指要取的RGB值儲(chǔ)存在rgbData數(shù)組的起始位置,一般為0。如果offset不為0,使用rgbData數(shù)組就不方便了,因?yàn)橐獜?/span>offset開(kāi)始的位置使用。而scanlength不對(duì)(如:|scanlength|<width)的話,就可能造成所取的rgbData值會(huì)有重復(fù)。 ? 在API文檔里面有一個(gè)公式,可以讓我們理解地更深刻: rgbData[offset + (a - x) + (b - y) * scanlength] = P(a, b) ? 其中P(a, b)表示在IMAGE數(shù)組中位置為(a,b)的像素點(diǎn)。 具體的內(nèi)容可以參考API文檔。 其實(shí)MIDP2.0的getRGB()跟NOKIA的getPixels()是類似的。 ” --- xpanda | |
| ? | ? | |
?
4?字符串換行問(wèn)題
?
drawString/Line Wrap/StringLayout
| 關(guān)鍵詞 | 詳細(xì)描述 | |
| 用g.drawString(); 要顯示的文字很多,那應(yīng)該如何實(shí)現(xiàn)在Canvas上換行呢 | “StringLayout類可以自動(dòng)排版,還能上下翻行。 代碼在 http://www.j2medev.com/bbs/dispbbs.asp?BoardID=11 &replyID=20309&id=3997&skin=0可以找到。 ” --- sakaipb “自動(dòng)處理字符串折行顯示的封裝類Line Wrap 代碼以及如何使用的例子都可以從 http://fotomica.astrientlabs.com/downloads/textwrap.jsp?找到。?????? ” --- zhengyun | |
| ? | ? | |
?
5?字體問(wèn)題
?
Font/setFont/摩托羅拉
| 關(guān)鍵詞 | 詳細(xì)描述 | |
| moto系列的手機(jī)是不是不支持用setFont來(lái)修改字體的大小呢? | “motoV360這機(jī)器就這德性。 ” --- Lcheer ? “好像moto的某些手機(jī)里只有一種字體,高度是17x17,而且下面還會(huì)被割去幾個(gè)象素。” --?lulei204 ? “MOTO中低端機(jī)型都只有一種字體,而且是中號(hào)字體。” --?summoner ? | |
| SonyEricsson?S700c 上用g.drawString()方法繪制的漢字為何很大? | “索愛(ài)S700c上面,Canvas?的drawString()方法繪制的漢字為何很大??一行最多顯示10個(gè)字左右。 用了Font的SIZE_SMALL還是一樣。” --webgl2005 “有的手機(jī)只支持一種字體,用Font的參數(shù)都沒(méi)有效果。” ---magicDragon | |
| 怎樣為nokia qd設(shè)置字體顏色? | “不知道為什么在QD上字體就只有黑色.怎么設(shè)置也不行. Image offImage????= Image.createImage(SCREEN_WIDTH, SCREEN_HEIGHT) ; Graphics offGraphics = offImage.getGraphics() ; offGraphics.setColor(0xffff00) ; offGraphics.drawString(……) ; 這么寫的話,字體永遠(yuǎn)都是黑色的,但在paint()里直接用g.setColor()卻是正常的。” ---?海標(biāo) “setColor在非paint中得到的graphics中都無(wú)效。這是S60的bug。 ” ---蠟筆小刀 ? | |
| moto字體移植問(wèn)題 | “有人說(shuō)moto字體不好看,大小調(diào)整上給移植帶來(lái)很大麻煩,我以前也這么認(rèn)為。 現(xiàn)在我覺(jué)得moto的字體還行。在沒(méi)有辦法的情況下,我們只好在程序上下功夫,讓字排列的更美觀、更好看。” --lulei204 “moto就是這樣,移植的時(shí)候狠不得把所有文字都去掉” --topig | |
?
?
6?重新播放音樂(lè)問(wèn)題
?
player/stop/start
| 關(guān)鍵詞 | 詳細(xì)描述 | |
| 音樂(lè)停止播放后如何從起始位置重新播放? | “如果你的音樂(lè)自己播放完畢了,而用戶手動(dòng)提交命令要求重新播放,那么你可以直接調(diào)用player.play()即可。或者一開(kāi)始播放音樂(lè)的時(shí)候就利用player.setLoopCount設(shè)定循環(huán)播放次數(shù)。 ? 如果你希望音樂(lè)自動(dòng)重新播放,那么就必須實(shí)現(xiàn)“播放器狀態(tài)更新事件”: 以下內(nèi)容為程序代碼: //?綁定狀態(tài)更新事件過(guò)程 player.addPlayerListener(this); ? /* ?*?本類實(shí)現(xiàn)了PlayerListener接口。通過(guò)這個(gè)事件來(lái)告知媒體已經(jīng)播放完畢 ?*/ public void playerUpdate(Player player, String event, Object data){ ???????System.out.println("Enter playerUpdate>>" + ?????????????????????event); ?????? ???????if(event == PlayerListener.END_OF_MEDIA){ ??????????????try{ ?????????????????????....??????????????????????? ??????????????}catch(Exception e){ ?????????????????????e.printStackTrace(); ??????????????} ???????} ???????else if(event == PlayerListener.STOPPED) ???????{ ?????????????System.out.println("playerUpdate>>PlayerListener.STOPPED"); ???????} ???????else if(event == PlayerListener.STARTED) ???????{ ?????????????System.out.println("playerUpdate>>PlayerListener.STARTED"); ???????} } ” --- zhengyun ? | |
| SonyEricsson K750手機(jī)上無(wú)法實(shí)現(xiàn)暫停,續(xù)播功能? | “發(fā)覺(jué)在索愛(ài)K750手機(jī)上無(wú)法實(shí)現(xiàn)暫停,續(xù)播功能。該功能在MOTO,NOKIA手機(jī)上可以使用。” --trysunset ? | |
?
7?MediaException問(wèn)題
?
player/stop/start
| 關(guān)鍵詞 | 詳細(xì)描述 | |
| 播放MIDI時(shí),真機(jī)上會(huì)爆出MediaException 異常,而在其他機(jī)器上可正常播放MIDI? | “is = getClass().getResourceAsStream("/title.mid"); ? if (is != null) { ?player_ = Manager.createPlayer(is, "audio/midi"); ????player_.setLoopCount(-1); ????player_.start(); } 這個(gè)代碼是我用來(lái)監(jiān)測(cè)一款機(jī)器用的,在播放MIDI時(shí),其真機(jī)上會(huì)爆出MediaException異常,而在其他機(jī)器上可正常播放MIDI! 有意思的是這個(gè)代碼用來(lái)播放WAV則是正常的,由于該PDA機(jī)自帶播放器,我將MIDI直接傳入其中播放時(shí)可以播放的,所以應(yīng)該不會(huì)有MIDI格式不兼容的問(wèn)題! ” --- imtrash ? “虛擬機(jī)不支持MIDI的播放!??我用過(guò)的NOKIA6630的手機(jī)就是這樣的!” --- zgly ? “你可以將虛擬機(jī)可以播放的音樂(lè)類型用下面的代碼 ???public void showForm() { ????????String[]??protocols, contentTypes; ? ????????protocols = Manager.getSupportedProtocols(null); ????????for (int i = 0; i < protocols.length; i++) { ????????????contentTypes = Manager.getSupportedContentTypes( protocols[i]); ????????????for (int j = 0; j < contentTypes.length; j++) { ????????????????m_errForm.append(protocols[i] + ":" + contentTypes[j]);? ????????????} ????????} ????} 將信息顯示在一個(gè)FORM里!” --- zgly ? “必須明確的一點(diǎn)是,我們的MIDlet是運(yùn)行在Java ME平臺(tái)環(huán)境下的。??不一定設(shè)備提供的功能在Java ME平臺(tái)都得到了實(shí)現(xiàn)!” --- mingjava ? | |
| 在真機(jī)測(cè)試中, Nokia7610彈出一個(gè)錯(cuò)誤: “javax. microedition. media. MediaException: -18”? | “很明顯是nokia 7610上不支持這種媒體格式設(shè)置media time,所以拋出了MediaException。 把p.setMediaTime(5 * SECS_TO_MICROSECS);刪除即可” --?mingjava ? | |
| “error opening MIDI/tone device”或“fail in writing data to native”? | “播放MIDI的代碼在k700和6600上都沒(méi)問(wèn)題,在moto上不知道怎么回事卻報(bào)如下異常: javax.microedition.media.MediaException: fail in writing data to native 用e680i的模擬器仍然會(huì)報(bào)錯(cuò), 不過(guò)報(bào)出來(lái)的是: javax.microedition.media.MediaException: error opening MIDI/tone device ????????at com.sun.mmedia.MIDIPlayer.doPrefetch(+19) ????????at com.sun.mmedia.BasicPlayer.prefetch(+34) 最后找到原因了,moto的機(jī)器不能同時(shí)有兩個(gè)midi的player在prefetch()中,即使前面那個(gè)player并沒(méi)有執(zhí)行start(),后面生成player都會(huì)在prefetch()和start()的時(shí)候產(chǎn)生上面的異常! 因?yàn)槲矣幸粋€(gè)midi player一直在prefetch狀態(tài),所以新生成的midi的player都不能start(). 真是個(gè)奇怪的現(xiàn)象阿,在其他手機(jī)上都不會(huì)有這個(gè)問(wèn)題。” ---saltedfish |
| ? | ? |
?
8?混音問(wèn)題
?
player/mixer
| 關(guān)鍵詞 | 詳細(xì)描述 | |
| Moto真機(jī)上如何在播放背景音樂(lè)的時(shí)候再播放音效? | “摩托羅拉V300-V500-V600同時(shí)播放音樂(lè)的講究: 唯一支持的同步播放音樂(lè)的辦法是,midi和wav聲音混合播放。 即使是這樣,也存在著一個(gè)限制: 應(yīng)用程序必須先播放midi(可以作為背景音樂(lè)),然后再播放wav;wav文件還必須是以下的格式: PCM 8000KHZ; 8Bit; Mono。 除了上面這種方法,只要是一個(gè)新的media被播放,上一個(gè)Player必須被停止而且釋放資源。” --moto文檔 ? “MOTO系列手機(jī)中JAVA程序播放一個(gè)聲音文件比較簡(jiǎn)單,但是用于交互式音效時(shí)就有問(wèn)題了。 根據(jù)MOTO的一些資料顯示,在MOTO手機(jī)中播放聲音有下面幾條約束: 1、除了同時(shí)播放一個(gè)MIDI和一個(gè)WAV以外,MOTO手機(jī)無(wú)法同時(shí)播放多個(gè)聲音,而且必須是先播放MIDI然后播放WAV; 2、除了MIDI或音階序列以外,不能同時(shí)實(shí)現(xiàn)player的多個(gè)實(shí)例進(jìn)入prefetched狀態(tài)(預(yù)讀取聲音流); 3、播放新的聲音之前,前一個(gè)player必須停止并釋放資源(stop();deallocate())。 如果你遇到以下問(wèn)題,可以試試我的解決方法: 1)只能播一次,或幾次,接著就無(wú)法發(fā)出聲音; 2)播放新的聲音時(shí),總是會(huì)多播放一次前一個(gè)聲音。” ---linchangyu | |
| nokia6230i上的MediaException現(xiàn)象 | “當(dāng)一個(gè)Player被prefetched,那么其他Player也就不再能夠prefetched,除非它們都是midi或都是amr。 如果你沒(méi)有在start/prefetch一個(gè)Player之前把其他的Player停下來(lái),那么你將得到一個(gè)MediaException。” --?無(wú)名 ? | |
9?CustomItem問(wèn)題
?
CustomItem/repaint/traverse
| 關(guān)鍵詞 | 詳細(xì)描述 | |
| CustomItem的repaint | “repaint()產(chǎn)生重繪事件,在CustomItem里它有兩個(gè)同名的方法,其中一個(gè)有四個(gè)參數(shù),用來(lái)指定重畫區(qū)的起始X、Y坐標(biāo),寬度和高度;另外一個(gè)沒(méi)有參數(shù),表示重畫CustomItem的整個(gè)區(qū)域。paint()方法里的后兩個(gè)參數(shù)也是寬度和高度,但是這兩個(gè)方法的寬度和高度沒(méi)有任何聯(lián)系,?paint方法里的W和H是Item內(nèi)容區(qū)域的寬度和高度,并且只有這兩個(gè)值大于0時(shí),paint()方法才會(huì)被調(diào)用。” --mydeman ? “repaint()被調(diào)用之后會(huì)立刻返回,而調(diào)用paint()回調(diào)函數(shù)的工作會(huì)有另外一個(gè)專門處理UI的線程來(lái)完成。因此如果希望得到paint()方法完成后再返回,那么就可以在repaint()之后立刻調(diào)用serviceRepaint(),來(lái)強(qiáng)制隊(duì)列中重繪事件快點(diǎn)完成。” --- mydeman | |
| CustomItem上處理過(guò)左右上下方向鍵 | “由于我的CustomItem控件和一個(gè)Gauge控件同處于一個(gè)Form上,所以按上下左右鍵的時(shí)候,實(shí)際上被Form處理了,Form就認(rèn)為上下左右鍵是在切換控件的焦點(diǎn),而不會(huì)把這個(gè)按鍵事件傳給我的CustomItem了。也就是說(shuō),我的寫法一樣不會(huì)得到上下左右鍵的按鍵事件。” --?zhengyun ? “一部手機(jī)是否實(shí)際支持CustomItem internal traversal,需要向getInteractionModes()方法查詢才可知道,因?yàn)檫@是隱含的策略,并不是一定的。聽(tīng)說(shuō),在Nokia真機(jī)上,traverse好像并不好使用。 在我這里,這段代碼在模擬器上能夠使用,在真機(jī)上我不敢保證: ? 以下內(nèi)容為程序代碼: ?????protected boolean traverse(int dir,int viewportWidth, ????int viewportHeight,int visRect_inout[]) ??{ ??????????System.out.println("Enter traverse"); ? ?????????if(dir == Canvas.UP){ ???????System.out.println("traverse>>Press Up key!"); ??????????????return true; ??????????}else if(dir == Canvas.DOWN){ ?????System.out.println("traverse>>Press Down key!"); ??????????????return true; ??????????}else if(dir == NONE){ ?????System.out.println("traverse>>Press None key!"); ??????????????return true; ??????????} ? ??????????return false; ??} ?????protected void traverseOut(){ ?????????System.out.println("Enter traverse out"); ?????}” --?zhengyun ? “protected boolean traverse(int dir, int viewportWidth, int viewportHeight,???int[] visRect_inout) { ? ??switch (dir) { ??case Canvas.DOWN: ???if (location == UPPER) { ????location = IN; ???} else { ????repaint(); ????location = LOWER; ????return false; ???} ???break; ? ??case Canvas.UP: ???if (location == LOWER) { ????location = IN; ???} else { ????repaint(); ????location = UPPER; ????return false; ???} ???break; ? ??case Canvas.LEFT: ???System.out.println("LEFT"); ???break; ??case Canvas.RIGHT: ???System.out.println("RIGHT"); ???break; ??} ??return true; } 實(shí)際上在FORM里的左右鍵事件,也被用來(lái)處理焦點(diǎn),只不過(guò)在CUSTOM ITEM里左右鍵沒(méi)有響應(yīng),用上下鍵來(lái)處理焦點(diǎn)事件了。” ---hebaochen | |
?
10 Nokia播放Tone音樂(lè)問(wèn)題
?
Sound/
| 關(guān)鍵詞 | 詳細(xì)描述 | |
| 按鍵,音樂(lè)被中斷 | “在Nokia 3650,7650上使用Tone播放聲音,如果用戶一按鍵,那么音樂(lè)馬上被中斷。這個(gè)問(wèn)題是已經(jīng)在Nokia官方開(kāi)發(fā)論壇上得到確認(rèn)。是Symbian 6.0系統(tǒng)上的一個(gè)bug,在Symbian 7.0系統(tǒng)的手機(jī)(Nokia 7610,6600)上沒(méi)有這個(gè)問(wèn)題,在Nokia 40上也沒(méi)有這個(gè)問(wèn)題。 解決之道:這是系統(tǒng)的bug,只有使用其它方式的音樂(lè)播放,比如midi格式音樂(lè),否則是沒(méi)有辦法的。” --二當(dāng)家的 ? ? | |
總結(jié)
以上是生活随笔為你收集整理的j2medev“用户界面和多媒体”版面问题整理[0407更新]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 终于拿到了ThinkPad T61笔记本
- 下一篇: Visual Studio是蝙蝠车,LI