欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2015年09月27日 14:27:16   投稿:lijiao  
我們??吹揭恍L動(dòng)顯示的實(shí)例,比如UC瀏覽器中,顯示網(wǎng)頁(yè)的內(nèi)容。當(dāng)內(nèi)容比較多時(shí),采用滾動(dòng)分頁(yè)顯示是合理的。在Canvas中繪圖中,多余的內(nèi)容被截?cái)嗔恕H绾螌?shí)現(xiàn)滾動(dòng)分頁(yè)顯示呢?

【問(wèn)題描述】

我們??吹揭恍L動(dòng)顯示的實(shí)例,比如UC瀏覽器中,顯示網(wǎng)頁(yè)的內(nèi)容。當(dāng)內(nèi)容比較多時(shí),采用滾動(dòng)分頁(yè)顯示是合理的。在Canvas中繪圖中,多余的內(nèi)容被截?cái)嗔恕H绾螌?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

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請(qǐng)參考JavaMe連載(3)-也說(shuō)MVC設(shè)計(jì)模式,此處不再贅述。

【分析】

1 字符串拆分

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

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

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

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 繪制文本

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

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

文本繪制完成后,將坐標(biāo)變換回來(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 事件處理

當(dāng)檢測(cè)到按鍵事件后,進(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; 
  } 
 } 
} 

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

 

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

相關(guān)文章

  • 使用resty Quartz執(zhí)行定時(shí)任務(wù)的配置方法

    使用resty Quartz執(zhí)行定時(shí)任務(wù)的配置方法

    這篇文章主要為大家介紹了使用resty?Quartz來(lái)執(zhí)行定時(shí)任務(wù)的配置方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03
  • Java生成的隨機(jī)數(shù)靠譜嗎?多少次會(huì)重復(fù)?

    Java生成的隨機(jī)數(shù)靠譜嗎?多少次會(huì)重復(fù)?

    今天給大家?guī)?lái)的是關(guān)于Java的相關(guān)知識(shí),文章圍繞著Java生成的隨機(jī)數(shù)靠不靠譜展開(kāi),文中有非常詳細(xì)的介紹,需要的朋友可以參考下
    2021-06-06
  • Java格式化輸出printf()解讀

    Java格式化輸出printf()解讀

    這篇文章主要介紹了Java格式化輸出printf()解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java計(jì)算球從100米高度自由落下問(wèn)題

    Java計(jì)算球從100米高度自由落下問(wèn)題

    這篇文章主要介紹了Java球從100米高度自由落下問(wèn)題,需要的朋友可以參考下
    2017-02-02
  • spring MVC + bootstrap實(shí)現(xiàn)文件上傳示例(帶進(jìn)度條)

    spring MVC + bootstrap實(shí)現(xiàn)文件上傳示例(帶進(jìn)度條)

    本篇文章主要介紹了spring MVC + bootstrap實(shí)現(xiàn)文件上傳示例(帶進(jìn)度條),非常具有使用價(jià)值,有需要的朋友可以了解一下。
    2017-03-03
  • Spring Boot啟動(dòng)過(guò)程完全解析(一)

    Spring Boot啟動(dòng)過(guò)程完全解析(一)

    這篇文章主要介紹了Spring Boot啟動(dòng)過(guò)程完全解析(一),需要的朋友可以參考下
    2017-04-04
  • img 加載網(wǎng)絡(luò)圖片失敗 顯示默認(rèn)圖片的方法

    img 加載網(wǎng)絡(luò)圖片失敗 顯示默認(rèn)圖片的方法

    下面小編就為大家?guī)?lái)一篇img 加載網(wǎng)絡(luò)圖片失敗 顯示默認(rèn)圖片的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • Java+Swing實(shí)現(xiàn)經(jīng)典五子棋游戲

    Java+Swing實(shí)現(xiàn)經(jīng)典五子棋游戲

    五子棋是世界智力運(yùn)動(dòng)會(huì)競(jìng)技項(xiàng)目之一,是一種兩人對(duì)弈的純策略型棋類游戲,是世界智力運(yùn)動(dòng)會(huì)競(jìng)技項(xiàng)目之一。本文將采用Java Swing實(shí)現(xiàn)這一經(jīng)典游戲,需要的可以參考一下
    2022-01-01
  • Mybatis-Plus打印sql日志兩種方式

    Mybatis-Plus打印sql日志兩種方式

    這篇文章主要給大家介紹了關(guān)于Mybatis-Plus打印sql日志兩種方式,Mybatis-plus是MyBatis增強(qiáng)工具包,用于簡(jiǎn)化CRUD操作,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • java阻塞隊(duì)列BlockingQueue詳細(xì)解讀

    java阻塞隊(duì)列BlockingQueue詳細(xì)解讀

    這篇文章主要介紹了java阻塞隊(duì)列BlockingQueue詳細(xì)解讀,在新增的Concurrent包中,BlockingQueue很好的解決了多線程中,如何高效安全“傳輸”數(shù)據(jù)的問(wèn)題,通過(guò)這些高效并且線程安全的隊(duì)列類,為我們快速搭建高質(zhì)量的多線程程序帶來(lái)極大的便利,需要的朋友可以參考下
    2023-10-10

最新評(píng)論