亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

JavaMe開發自適應滾動顯示

2019-11-26 14:58:01
字體:
來源:轉載
供稿:網友

【問題描述】

我們??吹揭恍L動顯示的實例,比如UC瀏覽器中,顯示網頁的內容。當內容比較多時,采用滾動分頁顯示是合理的。在Canvas中繪圖中,多余的內容被截斷了。如何實現滾動分頁顯示呢?

【原理】

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

【代碼清單】

ShowHelp.javapackage 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 滾動分頁顯示;/n"     +"2 滾動分頁顯示;/n"     +"3 滾動分頁顯示;/n"     +"4 滾動分頁顯示;/n"     +"5 滾動分頁顯示;/n"     +"6 滾動分頁顯示;/n"     +"7 滾動分頁顯示;/n"     +"8 滾動分頁顯示;/n"     +"9 滾動分頁顯示;/n"     +"10 滾動分頁顯示;/n"     +"11 滾動分頁顯示;/n"     +"12 滾動分頁顯示;/n"     +"13 滾動分頁顯示;/n"     +"14 滾動分頁顯示;/n"     +"15 滾動分頁顯示;/n"     +"16 滾動分頁顯示;/n"     +"17 滾動分頁顯示;/n"     +"18 滾動分頁顯示;/n"     +"19 滾動分頁顯示;/n"     +"20 滾動分頁顯示;/n"     +"21 滾動分頁顯示;/n"     +"22 滾動分頁顯示;/n"     +"23 滾動分頁顯示;/n"     +"24 滾動分頁顯示;/n"     +"25 滾動分頁顯示;/n"     +"26 滾動分頁顯示;/n"     +"27 滾動分頁顯示;/n"     +"28 滾動分頁顯示;/n"     +"29 滾動分頁顯示;/n"     +"30 滾動分頁顯示;/n"     +"31 滾動分頁顯示;/n"     +"32 滾動分頁顯示;/n"     +"33 滾動分頁顯示;/n"     +"34 滾動分頁顯示;/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)-也說MVC設計模式,此處不再贅述。

【分析】

1 字符串拆分

String info_wrap1[] = StringDealMethod.format(info, width-15, ft);
具體請參考JavaMe連載(4)-繪制可自動換行文本

2 避免字截斷

如何在指定的區域內繪制整行文本,而不會因為字體或屏幕高度的改變使文本出現截斷的問題,使文本出現“半截字”的問題呢?

bodyHeight = ((int) (height-head.menuHeight-menu.menuHeight)/ft.getHeight())*ft.getHeight();
經過上述處理后,滾動區域的高度bodyHeight總會是字體高度的整數倍,這樣就不會出現上述字截斷的問題了。

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); 

文本繪制完成后,將坐標變換回來。

graphics.translate(0, -dir*currentPageIndex*bodyHeight); 

5 繪制滾動條

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 事件處理

當檢測到按鍵事件后,進行翻頁操作。

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;   }  } } 

本例方法能自適應的檢測屏幕的寬度和長度,依據字體的大小,對文本進行分頁,滾動顯示,實現效果如圖1所示:

 

圖 滾動顯示效果

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲娇小xxxx欧美娇小| 亚洲2020天天堂在线观看| 国产一区av在线| 第一福利永久视频精品| 91高潮在线观看| 性欧美暴力猛交69hd| 这里只有精品久久| 97免费视频在线| 国产精品免费小视频| 欧美日韩中文在线| 欧美极品在线视频| 欧美—级a级欧美特级ar全黄| 国产精品扒开腿做| 91精品国产91久久久久久吃药| 亚洲欧美日韩区| 亚洲成人久久电影| 福利二区91精品bt7086| 国产精品亚洲片夜色在线| 精品国产一区二区三区久久| 欧美一级大片在线观看| 国产精品一区二区三区久久久| 亚州欧美日韩中文视频| 一区二区三区四区精品| 91久久久久久久久久久| 性欧美xxxx交| 成人黄色在线播放| 91在线高清视频| 黄色一区二区在线| 国产日韩欧美视频在线| 日韩在线一区二区三区免费视频| 欧美日韩综合视频网址| 亚洲图片欧美午夜| 久久色免费在线视频| 国产精品免费福利| 91亚洲国产成人久久精品网站| 韩国三级日本三级少妇99| 在线精品视频视频中文字幕| 国产成人福利夜色影视| 2019亚洲日韩新视频| 久久久久久久久久av| 国产精品自产拍在线观看中文| 日韩精品一区二区三区第95| 欧美激情综合色综合啪啪五月| 欧美另类极品videosbest最新版本| 91极品女神在线| 中文欧美在线视频| 国产精品高潮呻吟久久av黑人| 国产欧美一区二区三区四区| 欧美性猛交xxxx黑人猛交| wwwwwwww亚洲| 欧美午夜片欧美片在线观看| 亚洲图中文字幕| 久久天天躁狠狠躁夜夜躁| 第一福利永久视频精品| 福利视频导航一区| 国产精品专区一| 亚洲精品久久久久中文字幕欢迎你| 国产一区玩具在线观看| 欧美午夜xxx| 亚洲国产欧美一区二区丝袜黑人| 韩国v欧美v日本v亚洲| www.日韩av.com| 成人做爽爽免费视频| 国产精品色悠悠| 久久综合电影一区| 欧美专区福利在线| 亚洲美女av网站| 丝袜亚洲另类欧美重口| 国产脚交av在线一区二区| 久久福利视频导航| 亚洲精品99久久久久| 日韩中文字幕在线免费观看| 亚洲国产成人久久综合一区| 欧美日韩激情美女| 国产一区二区三区视频| 亚洲国产精彩中文乱码av在线播放| 久久天天躁夜夜躁狠狠躁2022| 亚洲国产三级网| 亚洲精品第一页| 国产精品99久久久久久人| 91精品视频免费观看| 国产一区二区av| 精品香蕉在线观看视频一| 成人xvideos免费视频| 黄色成人av网| 日韩黄色高清视频| 国产亚洲精品激情久久| 国产69精品久久久久久| 国产精品一区二区三| 欧美视频二区36p| 欧美中文在线观看| 欧美丰满老妇厨房牲生活| 精品日韩美女的视频高清| 日韩av高清不卡| 成人精品视频久久久久| 亚洲精品免费一区二区三区| 久久精彩免费视频| 中文字幕成人精品久久不卡| 美日韩丰满少妇在线观看| 国产精品成人品| 91在线视频免费| 亚洲色图偷窥自拍| 97超碰蝌蚪网人人做人人爽| 国产成人精品av在线| 中文字幕亚洲综合久久筱田步美| 国产精品久久91| 欧美性猛交xxxx乱大交蜜桃| 日韩不卡在线观看| 亚洲一区二区三区乱码aⅴ蜜桃女| 成人国产亚洲精品a区天堂华泰| 亚洲图片在线综合| 色偷偷91综合久久噜噜| 欧美区在线播放| 国产精品成人aaaaa网站| 亚洲精品欧美一区二区三区| 国产精品扒开腿做| 久久色精品视频| 中文字幕一区二区精品| 欧美在线一区二区三区四| 色综合色综合网色综合| 国产成人亚洲综合91精品| 日韩av片电影专区| 国产精品永久免费| 97在线免费观看视频| 亚洲香蕉在线观看| 欧美一级高清免费| 最好看的2019年中文视频| 亚洲综合在线播放| 久久在线精品视频| 日本精品中文字幕| 一区二区三区四区精品| 日韩理论片久久| 45www国产精品网站| 日韩一区二区福利| 黑人欧美xxxx| 国产精品99久久99久久久二8| 精品久久久久久电影| 亚洲成人动漫在线播放| 最近2019中文免费高清视频观看www99| 日韩中文视频免费在线观看| 欧美理论片在线观看| 亚洲福利视频在线| 亚洲资源在线看| 亚洲最大av网站| 亚洲新声在线观看| 国产日韩欧美视频在线| 亚洲精品资源美女情侣酒店| 福利二区91精品bt7086| 欧美高清在线播放| 欧美疯狂xxxx大交乱88av| 欧美电影免费观看高清完整| 久久综合伊人77777蜜臀| 日韩高清a**址| 亚洲精品久久久久久下一站| 成人欧美一区二区三区黑人| 亚洲视频在线免费观看| 97精品伊人久久久大香线蕉| 欧美日韩一区二区免费在线观看| 国产精品欧美一区二区| 国产一区二区在线免费| 国模精品一区二区三区色天香| 久久久999精品| 国产成人精品久久亚洲高清不卡| 亚洲午夜精品久久久久久久久久久久|