- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) >
- JavaMe中怎么實(shí)現自適應滾動(dòng)顯示
JavaMe中怎么實(shí)現自適應滾動(dòng)顯示,相信很多沒(méi)有經(jīng)驗的人對此束手無(wú)策,為此本文總結了問(wèn)題出現的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
【原理】
JavaMe中有一個(gè)坐標變換的功能。當觸發(fā)相應的按鍵事件時(shí),我們就讓其顯示相應的頁(yè),并且使滾動(dòng)條滾動(dòng)到相應的位置。
【代碼清單】
ShowHelp.java
package com.token.view; import javax.microedition.lcdui.Font; import javax.microedition.lcdui.Graphics; import javax.microedition.lcdui.game.GameCanvas; import com.token.util.StringDealMethod; import com.token.util.UIController; import com.token.view.components.*; public class ShowHelp extends GameCanvas { private UIController controller; private Graphics graphics; private Font ft; private int width; private int height; private Menu menu; private Head head; private BackGroud backGroud; private int page = 0; private int currentPageIndex = 0; private int bodyHeight; private int dir = 0; public ShowHelp(UIController control) { super(false); this.controller=control; setFullScreenMode(true); width = getWidth(); height = getHeight(); menu = new Menu(this); head = new Head(this); backGroud = new BackGroud(this); } public void show() { int margin = 0; graphics = getGraphics(); graphics.clipRect(0,0, width, height); backGroud.drawBackGroud(this, graphics); head.drawHead(this, graphics, "幫助"); menu.drawMenu(this, graphics, "","返回"); //flushGraphics(); ft = Font.getFont(Font.FACE_PROPORTIONAL,Font.STYLE_BOLD,Font.SIZE_MEDIUM); String info = "1 滾動(dòng)分頁(yè)顯示;\n" +"2 滾動(dòng)分頁(yè)顯示;\n" +"3 滾動(dòng)分頁(yè)顯示;\n" +"4 滾動(dòng)分頁(yè)顯示;\n" +"5 滾動(dòng)分頁(yè)顯示;\n" +"6 滾動(dòng)分頁(yè)顯示;\n" +"7 滾動(dòng)分頁(yè)顯示;\n" +"8 滾動(dòng)分頁(yè)顯示;\n" +"9 滾動(dòng)分頁(yè)顯示;\n" +"10 滾動(dòng)分頁(yè)顯示;\n" +"11 滾動(dòng)分頁(yè)顯示;\n" +"12 滾動(dòng)分頁(yè)顯示;\n" +"13 滾動(dòng)分頁(yè)顯示;\n" +"14 滾動(dòng)分頁(yè)顯示;\n" +"15 滾動(dòng)分頁(yè)顯示;\n" +"16 滾動(dòng)分頁(yè)顯示;\n" +"17 滾動(dòng)分頁(yè)顯示;\n" +"18 滾動(dòng)分頁(yè)顯示;\n" +"19 滾動(dòng)分頁(yè)顯示;\n" +"20 滾動(dòng)分頁(yè)顯示;\n" +"21 滾動(dòng)分頁(yè)顯示;\n" +"22 滾動(dòng)分頁(yè)顯示;\n" +"23 滾動(dòng)分頁(yè)顯示;\n" +"24 滾動(dòng)分頁(yè)顯示;\n" +"25 滾動(dòng)分頁(yè)顯示;\n" +"26 滾動(dòng)分頁(yè)顯示;\n" +"27 滾動(dòng)分頁(yè)顯示;\n" +"28 滾動(dòng)分頁(yè)顯示;\n" +"29 滾動(dòng)分頁(yè)顯示;\n" +"30 滾動(dòng)分頁(yè)顯示;\n" +"31 滾動(dòng)分頁(yè)顯示;\n" +"32 滾動(dòng)分頁(yè)顯示;\n" +"33 滾動(dòng)分頁(yè)顯示;\n" +"34 滾動(dòng)分頁(yè)顯示;\n"; String info_wrap1[] = StringDealMethod.format(info, width-15, ft); page = info_wrap1.length*ft.getHeight()/(height-head.menuHeight-menu.menuHeight-2*margin)+1; bodyHeight = ((int) (height-head.menuHeight-menu.menuHeight)/ft.getHeight())*ft.getHeight(); margin = (height-head.menuHeight-menu.menuHeight-bodyHeight)/2; graphics.setFont(ft); graphics.setColor(Color.text); graphics.clipRect(0, head.menuHeight+margin, width, bodyHeight); graphics.translate(0, dir*currentPageIndex*bodyHeight); for(int i=0; i<info_wrap1.length;i++) { graphics.drawString(info_wrap1[i],5, i * ft.getHeight()+head.menuHeight+margin, Graphics.TOP|Graphics.LEFT); } graphics.translate(0, -dir*currentPageIndex*bodyHeight); drawScrollBar(); flushGraphics(); //System.out.println(graphics.getTranslateY()); } private void drawScrollBar() { int barHeight = height-head.menuHeight-menu.menuHeight; graphics.setColor(Color.menuFrame); graphics.fillRect(width-3, head.menuHeight, 2, barHeight); graphics.setColor(Color.selectBg); graphics.fillRect(width-4, head.menuHeight+(currentPageIndex)*barHeight/page, 4, barHeight/page); } protected void keyPressed(int keyCode) { //System.out.println(keycode); switch(keyCode) { case KeyID.SOFT_RIGHT: { String flag = "0"; Object [] args = {flag,""}; controller.handleEvent(UIController.EventID.EVENT_MAIN_SCREEN,args); break; } default: ; } keyCode = getGameAction(keyCode); //System.out.println(page); switch(keyCode) { case UP: { dir = -1; if(currentPageIndex>0) { currentPageIndex--; } else { //dir = 0; } show(); break; } case DOWN: { dir = -1; if(currentPageIndex<page-1) { currentPageIndex++; } else { //dir = 0; } show(); break; } } } }
*UIController請參考JavaMe連載(3)-也說(shuō)MVC設計模式,此處不再贅述。
【分析】
1 字符串拆分
String info_wrap1[] = StringDealMethod.format(info, width-15, ft);
具體請參考JavaMe連載(4)-繪制可自動(dòng)換行文本
2 避免字截斷
如何在指定的區域內繪制整行文本,而不會(huì )因為字體或屏幕高度的改變使文本出現截斷的問(wèn)題,使文本出現“半截字”的問(wèn)題呢?
bodyHeight = ((int) (height-head.menuHeight-menu.menuHeight)/ft.getHeight())*ft.getHeight();
經(jīng)過(guò)上述處理后,滾動(dòng)區域的高度bodyHeight總會(huì )是字體高度的整數倍,這樣就不會(huì )出現上述字截斷的問(wèn)題了。
3 繪制文本
for(int i=0; i<info_wrap1.length;i++) { graphics.drawString(info_wrap1[i],5, i * ft.getHeight()+head.menuHeight+margin, Graphics.TOP|Graphics.LEFT); }
4 坐標變換
graphics.clipRect(0, head.menuHeight+margin, width, bodyHeight); graphics.translate(0, dir*currentPageIndex*bodyHeight);
文本繪制完成后,將坐標變換回來(lái)。
graphics.translate(0, -dir*currentPageIndex*bodyHeight);
5 繪制滾動(dòng)條
private void drawScrollBar() { int barHeight = height-head.menuHeight-menu.menuHeight; graphics.setColor(Color.menuFrame); graphics.fillRect(width-3, head.menuHeight, 2, barHeight); graphics.setColor(Color.selectBg); graphics.fillRect(width-4, head.menuHeight+(currentPageIndex)*barHeight/page, 4, barHeight/page); }
6 事件處理
當檢測到按鍵事件后,進(jìn)行翻頁(yè)操作。
protected void keyPressed(int keyCode) { //System.out.println(keycode); switch(keyCode) { case KeyID.SOFT_RIGHT: { String flag = "0"; Object [] args = {flag,""}; controller.handleEvent(UIController.EventID.EVENT_MAIN_SCREEN,args); break; } default: ; } keyCode = getGameAction(keyCode); //System.out.println(page); switch(keyCode) { case UP: { dir = -1; if(currentPageIndex>0) { currentPageIndex--; } else { //dir = 0; } show(); break; } case DOWN: { dir = -1; if(currentPageIndex<page-1) { currentPageIndex++; } else { //dir = 0; } show(); break; } } }
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站