国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

JavaMe中怎么實(shí)現自適應滾動(dòng)顯示

發(fā)布時(shí)間:2021-07-04 20:13 來(lái)源:億速云 閱讀:0 作者:Leah 欄目: 開(kāi)發(fā)技術(shù)

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í),將立刻刪除涉嫌侵權內容。

99久久人妻精品免费一区| 精品一区二区三区无码免费直播| 人妻丰满熟妇AV无码区动漫| 无套内射CHINESEHD| 在线播放无码高潮的视频| 性XXXXFREEXXXXX国产|