自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

JavaMe開發(fā):自適應(yīng)滾動(dòng)顯示

開發(fā) 后端
我們??吹揭恍L動(dòng)顯示的實(shí)例,比如UC瀏覽器中,顯示網(wǎng)頁(yè)的內(nèi)容。當(dāng)內(nèi)容比較多時(shí),采用滾動(dòng)分頁(yè)顯示是合理的。在Canvas中繪圖中,多余的內(nèi)容被截?cái)嗔?。如何?shí)現(xiàn)滾動(dòng)分頁(yè)顯示呢?

【問(wèn)題描述】

我們常看到一些滾動(dòng)顯示的實(shí)例,比如UC瀏覽器中,顯示網(wǎng)頁(yè)的內(nèi)容。當(dāng)內(nèi)容比較多時(shí),采用滾動(dòng)分頁(yè)顯示是合理的。在Canvas中繪圖中,多余的內(nèi)容被截?cái)嗔?。如何?shí)現(xiàn)滾動(dòng)分頁(yè)顯示呢?

 

【原理】

JavaMe中有一個(gè)坐標(biāo)變換的功能。當(dāng)觸發(fā)相應(yīng)的按鍵事件時(shí),我們就讓其顯示相應(yīng)的頁(yè),并且使?jié)L動(dòng)條滾動(dòng)到相應(yīng)的位置。

 

【代碼清單】

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 滾動(dòng)分頁(yè)顯示;\n" 
  56.                 +"2 滾動(dòng)分頁(yè)顯示;\n" 
  57.                 +"3 滾動(dòng)分頁(yè)顯示;\n" 
  58.                 +"4 滾動(dòng)分頁(yè)顯示;\n" 
  59.                 +"5 滾動(dòng)分頁(yè)顯示;\n" 
  60.                 +"6 滾動(dòng)分頁(yè)顯示;\n" 
  61.                 +"7 滾動(dòng)分頁(yè)顯示;\n" 
  62.                 +"8 滾動(dòng)分頁(yè)顯示;\n" 
  63.                 +"9 滾動(dòng)分頁(yè)顯示;\n" 
  64.                 +"10 滾動(dòng)分頁(yè)顯示;\n" 
  65.                 +"11 滾動(dòng)分頁(yè)顯示;\n" 
  66.                 +"12 滾動(dòng)分頁(yè)顯示;\n" 
  67.                 +"13 滾動(dòng)分頁(yè)顯示;\n" 
  68.                 +"14 滾動(dòng)分頁(yè)顯示;\n" 
  69.                 +"15 滾動(dòng)分頁(yè)顯示;\n" 
  70.                 +"16 滾動(dòng)分頁(yè)顯示;\n" 
  71.                 +"17 滾動(dòng)分頁(yè)顯示;\n" 
  72.                 +"18 滾動(dòng)分頁(yè)顯示;\n" 
  73.                 +"19 滾動(dòng)分頁(yè)顯示;\n" 
  74.                 +"20 滾動(dòng)分頁(yè)顯示;\n" 
  75.                 +"21 滾動(dòng)分頁(yè)顯示;\n" 
  76.                 +"22 滾動(dòng)分頁(yè)顯示;\n" 
  77.                 +"23 滾動(dòng)分頁(yè)顯示;\n" 
  78.                 +"24 滾動(dòng)分頁(yè)顯示;\n" 
  79.                 +"25 滾動(dòng)分頁(yè)顯示;\n" 
  80.                 +"26 滾動(dòng)分頁(yè)顯示;\n" 
  81.                 +"27 滾動(dòng)分頁(yè)顯示;\n" 
  82.                 +"28 滾動(dòng)分頁(yè)顯示;\n" 
  83.                 +"29 滾動(dòng)分頁(yè)顯示;\n" 
  84.                 +"30 滾動(dòng)分頁(yè)顯示;\n" 
  85.                 +"31 滾動(dòng)分頁(yè)顯示;\n" 
  86.                 +"32 滾動(dòng)分頁(yè)顯示;\n" 
  87.                 +"33 滾動(dòng)分頁(yè)顯示;\n" 
  88.                 +"34 滾動(dòng)分頁(yè)顯示;\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請(qǐng)參考JavaMe連載(3)-也說(shuō)MVC設(shè)計(jì)模式,此處不再贅述。

#p#

【分析】

1 字符串拆分

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

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

 

2 避免字截?cái)?/p>

如何在指定的區(qū)域內(nèi)繪制整行文本,而不會(huì)因?yàn)樽煮w或屏幕高度的改變使文本出現(xiàn)截?cái)嗟膯?wèn)題,使文本出現(xiàn)“半截字”的問(wèn)題呢?

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

經(jīng)過(guò)上述處理后,滾動(dòng)區(qū)域的高度bodyHeight總會(huì)是字體高度的整數(shù)倍,這樣就不會(huì)出現(xiàn)上述字截?cái)嗟膯?wèn)題了。

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 坐標(biāo)變換

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

文本繪制完成后,將坐標(biāo)變換回來(lái)。

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

5 繪制滾動(dòng)條

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

當(dāng)檢測(cè)到按鍵事件后,進(jìn)行翻頁(yè)操作。

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

本例方法能自適應(yīng)的檢測(cè)屏幕的寬度和長(zhǎng)度,依據(jù)字體的大小,對(duì)文本進(jìn)行分頁(yè),滾動(dòng)顯示,實(shí)現(xiàn)效果如圖1所示:


圖1 滾動(dòng)顯示效果

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

【系列文章】

  1. JavaMe開發(fā):低級(jí)界面繪圖之點(diǎn)陣字
  2. JavaMe開發(fā):低級(jí)界面繪圖之菜單
  3. JavaMe開發(fā):也說(shuō)MVC設(shè)計(jì)模式
  4. JavaMe開發(fā):繪制可自動(dòng)換行文本
  5. JavaMe開發(fā):繪制文本框TextEdit
  6. JavaM開發(fā):自適應(yīng)滾動(dòng)顯示
責(zé)任編輯:林師授 來(lái)源: tandesir的博客
相關(guān)推薦

2017-06-06 10:30:12

前端Web寬度自適應(yīng)

2023-11-16 09:50:56

鴻蒙自適應(yīng)布局

2013-12-02 17:40:48

系統(tǒng)監(jiān)控工具Glances

2023-07-31 08:24:34

MySQL索引計(jì)數(shù)

2010-08-30 10:26:20

DIV自適應(yīng)高度

2010-08-30 09:52:03

DIV高度自適應(yīng)

2014-09-05 10:10:32

Android自適應(yīng)布局設(shè)計(jì)

2012-05-09 10:09:18

JavaMEJava

2012-05-09 10:35:36

JavaMEJava

2012-05-09 10:03:08

JavaMEJava

2009-04-23 11:24:09

2011-05-12 11:28:20

按比例縮放

2022-10-24 17:57:06

CSS容器查詢

2022-04-12 07:48:57

云技術(shù)SDN網(wǎng)絡(luò)

2024-05-22 09:31:07

2023-10-23 08:48:04

CSS寬度標(biāo)題

2025-01-21 08:00:00

自適應(yīng)框架框架開發(fā)

2012-05-09 10:22:44

JavaMEJava

2012-05-09 09:49:54

JavaMeJava

2014-04-15 13:09:08

Android配色colour
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)