程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> JavaMe開發:自適應滾動顯示(1)

JavaMe開發:自適應滾動顯示(1)

編輯:J2ME

【問題描述】

我們常看到一些滾動顯示的實例,比如UC浏覽器中,顯示網頁的內容。當內容比較多時,采用滾動分頁顯示是合理的。在Canvas中繪圖中,多余的內容被截斷了。如何實現滾動分頁顯示呢?

【原理】

JavaMe中有一個坐標變換的功能。當觸發相應的按鍵事件時,我們就讓其顯示相應的頁,並且使滾動條滾動到相應的位置。

【代碼清單】

ShowHelp.Java

  1. package com.token.vIEw;
  2. import Javax.microedition.lcdui.Font;
  3. import Javax.microedition.lcdui.Graphics;
  4. import Javax.microedition.lcdui.game.GameCanvas;
  5. import com.token.util.StringDealMethod;
  6. import com.token.util.UIController;
  7. import com.token.vIEw.components.*;
  8. public class ShowHelp extends GameCanvas
  9. {
  10. private UIController controller;
  11. private Graphics graphics;
  12. private Font ft;
  13. private int width;
  14. private int height;
  15. private Menu menu;
  16. private Head head;
  17. private BackGroud backGroud;
  18. private int page = 0;
  19. private int currentPageIndex = 0;
  20. private int bodyHeight;
  21. private int dir = 0;
  22. public ShowHelp(UIController control)
  23. {
  24. super(false);
  25. this.controller=control;
  26. setFullScreenMode(true);
  27. width = getWidth();
  28. height = getHeight();
  29. menu = new Menu(this);
  30. head = new Head(this);
  31. backGroud = new BackGroud(this);
  32. }
  33. public void show()
  34. {
  35. int margin = 0;
  36. graphics = getGraphics();
  37. graphics.clipRect(0,0, width, height);
  38. backGroud.drawBackGroud(this, graphics);
  39. head.drawHead(this, graphics, "幫助");
  40. menu.drawMenu(this, graphics, "","返回");
  41. //flushGraphics();
  42. ft = Font.getFont(Font.FACE_PROPORTIONAL,Font.STYLE_BOLD,Font.SIZE_MEDIUM);
  43. String info = "1 滾動分頁顯示;\n"
  44. +"2 滾動分頁顯示;\n"
  45. +"3 滾動分頁顯示;\n"
  46. +"4 滾動分頁顯示;\n"
  47. +"5 滾動分頁顯示;\n"
  48. +"6 滾動分頁顯示;\n"
  49. +"7 滾動分頁顯示;\n"
  50. +"8 滾動分頁顯示;\n"
  51. +"9 滾動分頁顯示;\n"
  52. +"10 滾動分頁顯示;\n"
  53. +"11 滾動分頁顯示;\n"
  54. +"12 滾動分頁顯示;\n"
  55. +"13 滾動分頁顯示;\n"
  56. +"14 滾動分頁顯示;\n"
  57. +"15 滾動分頁顯示;\n"
  58. +"16 滾動分頁顯示;\n"
  59. +"17 滾動分頁顯示;\n"
  60. +"18 滾動分頁顯示;\n"
  61. +"19 滾動分頁顯示;\n"
  62. +"20 滾動分頁顯示;\n"
  63. +"21 滾動分頁顯示;\n"
  64. +"22 滾動分頁顯示;\n"
  65. +"23 滾動分頁顯示;\n"
  66. +"24 滾動分頁顯示;\n"
  67. +"25 滾動分頁顯示;\n"
  68. +"26 滾動分頁顯示;\n"
  69. +"27 滾動分頁顯示;\n"
  70. +"28 滾動分頁顯示;\n"
  71. +"29 滾動分頁顯示;\n"
  72. +"30 滾動分頁顯示;\n"
  73. +"31 滾動分頁顯示;\n"
  74. +"32 滾動分頁顯示;\n"
  75. +"33 滾動分頁顯示;\n"
  76. +"34 滾動分頁顯示;\n";
  77. String info_wrap1[] = StringDealMethod.format(info, width-15, ft);
  78. page = info_wrap1.length*ft.getHeight()/(height-head.menuHeight-menu.menuHeight-2*margin)+1;
  79. bodyHeight = ((int) (height-head.menuHeight-menu.menuHeight)/ft.getHeight())*ft.getHeight();
  80. margin = (height-head.menuHeight-menu.menuHeight-bodyHeight)/2;
  81. graphics.setFont(ft);
  82. graphics.setColor(Color.text);
  83. graphics.clipRect(0, head.menuHeight+margin, width, bodyHeight);
  84. graphics.translate(0, dir*currentPageIndex*bodyHeight);
  85. for(int i=0; i<info_wrap1.length;i++)
  86. {
  87. graphics.drawString(info_wrap1[i],5, i * ft.getHeight()+head.menuHeight+margin, Graphics.TOP|Graphics.LEFT);
  88. }
  89. graphics.translate(0, -dir*currentPageIndex*bodyHeight);
  90. drawScrollBar();
  91. flushGraphics();
  92. //System.out.println(graphics.getTranslateY());
  93. }
  94. private void drawScrollBar()
  95. {
  96. int barHeight = height-head.menuHeight-menu.menuHeight;
  97. graphics.setColor(Color.menuFrame);
  98. graphics.fillRect(width-3, head.menuHeight, 2, barHeight);
  99. graphics.setColor(Color.selectBg);
  100. graphics.fillRect(width-4, head.menuHeight+(currentPageIndex)*barHeight/page, 4, barHeight/page);
  101. }
  102. protected void keyPressed(int keyCode)
  103. {
  104. //System.out.println(keycode);
  105. switch(keyCode)
  106. {
  107. case KeyID.SOFT_RIGHT:
  108. {
  109. String flag = "0";
  110. Object [] args = {flag,""};
  111. controller.handleEvent(UIController.EventID.EVENT_MAIN_SCREEN,args);
  112. break;
  113. }
  114. default:
  115. ;
  116. }
  117. keyCode = getGameAction(keyCode);
  118. //System.out.println(page);
  119. switch(keyCode)
  120. {
  121. case UP:
  122. {
  123. dir = -1;
  124. if(currentPageIndex>0)
  125. {
  126. currentPageIndex--;
  127. }
  128. else
  129. {
  130. //dir = 0;
  131. }
  132. show();
  133. break;
  134. }
  135. case DOWN:
  136. {
  137. dir = -1;
  138. if(currentPageIndex<page-1)
  139. {
  140. currentPageIndex++;
  141. }
  142. else
  143. {
  144. //dir = 0;
  145. }
  146. show();
  147. break;
  148. }
  149. }
  150. }
  151. }

*UIController請參考JavaMe連載(3)-也說MVC設計模式,此處不再贅述。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved