成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JavaMe開發:自適應滾動顯示

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

【問題描述】

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

 

【原理】

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

 

【代碼清單】

ShowHelp.java

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

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

#p#

【分析】

1 字符串拆分

  1. String info_wrap1[] = StringDealMethod.format(info, width-15, ft); 

具體請參考JavaMe連載(4)-繪制可自動換行文本

 

2 避免字截斷

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

  1. bodyHeight = ((int) (height-head.menuHeight-menu.menuHeight)/ft.getHeight())*ft.getHeight(); 

經過上述處理后,滾動區域的高度bodyHeight總會是字體高度的整數倍,這樣就不會出現上述字截斷的問題了。

3 繪制文本

  1. for(int i=0; i<info_wrap1.length;i++)  
  2. {  
  3.     graphics.drawString(info_wrap1[i],5, i * ft.getHeight()+head.menuHeight+margin, Graphics.TOP|Graphics.LEFT);  

4 坐標變換

  1. graphics.clipRect(0, head.menuHeight+margin, width, bodyHeight);  
  2. graphics.translate(0, dir*currentPageIndex*bodyHeight); 

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

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

5 繪制滾動條

  1. private void drawScrollBar()  
  2. {  
  3.     int barHeight = height-head.menuHeight-menu.menuHeight;  
  4.       
  5.     graphics.setColor(Color.menuFrame);  
  6.     graphics.fillRect(width-3, head.menuHeight, 2, barHeight);  
  7.     graphics.setColor(Color.selectBg);  
  8.     graphics.fillRect(width-4, head.menuHeight+(currentPageIndex)*barHeight/page, 4, barHeight/page);  

6 事件處理

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

  1. protected void keyPressed(int keyCode)  
  2. {  
  3.     //System.out.println(keycode);  
  4.     switch(keyCode)  
  5.     {  
  6.         case KeyID.SOFT_RIGHT:  
  7.         {  
  8.             String flag = "0";  
  9.             Object [] args = {flag,""};  
  10.             controller.handleEvent(UIController.EventID.EVENT_MAIN_SCREEN,args);  
  11.             break;  
  12.         }  
  13.         default:  
  14.             ;  
  15.     }  
  16.           
  17.     keyCode = getGameAction(keyCode);  
  18.     //System.out.println(page);  
  19.           
  20.     switch(keyCode)  
  21.     {  
  22.           
  23.         case UP:  
  24.         {  
  25.             dir = -1;  
  26.                       
  27.                   
  28.             if(currentPageIndex>0)  
  29.             {  
  30.                 currentPageIndex--;  
  31.             }  
  32.             else   
  33.             {  
  34.                 //dir = 0;  
  35.             }  
  36.               
  37.             show();  
  38.             break;  
  39.               
  40.         }  
  41.         case DOWN:  
  42.         {  
  43.             dir = -1;  
  44.             if(currentPageIndex<page-1)  
  45.             {  
  46.                 currentPageIndex++;  
  47.             }  
  48.             else   
  49.             {     
  50.                 //dir = 0;  
  51.             }  
  52.                   
  53.             show();  
  54.             break;  
  55.         }  
  56.     }  
  57. }  

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


圖1 滾動顯示效果

原文鏈接:http://blog.csdn.net/tandesir/article/details/7548518

【系列文章】

  1. JavaMe開發:低級界面繪圖之點陣字
  2. JavaMe開發:低級界面繪圖之菜單
  3. JavaMe開發:也說MVC設計模式
  4. JavaMe開發:繪制可自動換行文本
  5. JavaMe開發:繪制文本框TextEdit
  6. JavaM開發:自適應滾動顯示
責任編輯:林師授 來源: tandesir的博客
相關推薦

2017-06-06 10:30:12

前端Web寬度自適應

2023-11-16 09:50:56

鴻蒙自適應布局

2013-12-02 17:40:48

系統監控工具Glances

2010-08-30 09:52:03

DIV高度自適應

2014-09-05 10:10:32

Android自適應布局設計

2010-08-30 10:26:20

DIV自適應高度

2023-07-31 08:24:34

MySQL索引計數

2012-05-09 10:09:18

JavaMEJava

2012-05-09 10:35:36

JavaMEJava

2012-05-09 10:03:08

JavaMEJava

2022-04-12 07:48:57

云技術SDN網絡

2024-05-22 09:31:07

2023-10-23 08:48:04

CSS寬度標題

2025-01-21 08:00:00

自適應框架框架開發

2009-04-23 11:24:09

2011-05-12 11:28:20

按比例縮放

2022-10-24 17:57:06

CSS容器查詢

2012-05-09 10:22:44

JavaMEJava

2012-05-09 09:49:54

JavaMeJava

2017-08-16 14:08:46

Android O圖標視覺
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人av免费看 | 性高朝久久久久久久3小时 av一区二区三区四区 | 男女网站视频 | 欧美4p| 欧美综合一区二区 | 国产色婷婷精品综合在线手机播放 | 国产91精品久久久久久久网曝门 | 黄免费观看 | 精品美女在线观看视频在线观看 | 99久久精品免费看国产四区 | 亚洲综合一区二区三区 | 日产精品久久久一区二区福利 | 国产小视频在线 | 91亚洲国产 | 亚洲二区在线 | 国产高清性xxxxxxxx | 在线观看视频一区二区三区 | 国产一级在线观看 | 天堂中文在线播放 | 欧美日韩高清免费 | 亚洲一区国产 | 亚洲成人av一区二区 | 欧美a在线| 一区二区三区视频免费观看 | 日本一区二区三区视频在线 | 亚洲视频在线免费观看 | 久久免费精品 | 欧美黑人一区 | 欧美性大战xxxxx久久久 | 亚洲风情在线观看 | 久久噜 | 日韩在线看片 | 日韩三 | 一区二区三区四区在线视频 | 国内久久| 国产一区二区久久 | 最新中文字幕在线 | 一区二区在线看 | 日韩成人在线免费视频 | 中文一级片 | 色婷婷一区二区三区四区 |