很多時候,由于手機屏幕太小,一下子顯示不了那么多內容,這個時候就需要通過按鍵一點一點的顯示下面的內容(相當于瀏覽器中的滾動條的功能)。我做了一個類,能夠一點一點的顯示內容。其實就是個容器,把內容統統放在容器中,計算全部內容的高度,計算每屏顯示的高,每次移動的高度,需要移動的總次數,通過這些量就能確定滾動情況了。
PS:我討厭C/S架構的程序,原因就是很多問題都要自己去考慮,比如滾動條、文字換行啊什么的。而B/S架構就不需要考慮這種“低級問題”,瀏覽器幫我們解決了。
如何使用?看下面
只要注意3個地方就可以了。構造函數中需要告訴它內容總高度是多少,每屏顯示的高是多少,每按鍵一次移動的高度是多少,通過這3個參數就能確定滾動情況了。
還有就是在keyPressed和paint中注意調用它的兩個方法。
當然在內容過長時,旁邊加個滾動條就更好了,改一下Container的paint()方法就可以了。
另外這里顯示的都是文字,并且循環了for(int i=0;i<contents.length;i++)很多次,當然沒這個必要,萬一碰到有圖有文字的時候此類也可以用,不過可能需要在container.keyPressed(keyCode);上加些條件罷了。
下面是添加了滾動條之后的類,注意構造函數多了一個變量,用于表示滾動條從哪里開始畫:
加了滾動條之后的page:
注意圖最右邊的滾動條了嗎?:)。滾動條顏色大小啊什么的需要自己根據實際情況“改裝”,我這個是最簡單的畫法了,呵呵。
PS:我討厭C/S架構的程序,原因就是很多問題都要自己去考慮,比如滾動條、文字換行啊什么的。而B/S架構就不需要考慮這種“低級問題”,瀏覽器幫我們解決了。
import javax.microedition.lcdui.Graphics;
import com.tlt.util.Consts;
import com.tlt.view.CommonObject;
public class Container extends CommonObject {
int maxHeight;//內容總高度
int pageHeight;//每屏顯示的高
int deltaY;//每次移動的高度
int count;//需要移動的總次數
int index;//當前移動的次數
int offsetY;//向上移動的高度,那么y-offsetY就是開始畫的地方
public Container(int maxHeight,int pageHeight,int deltaY){
this.maxHeight=maxHeight;
this.pageHeight=pageHeight;
this.deltaY=deltaY;
count=(maxHeight-pageHeight)/deltaY+1;
}
public void close() {
// TODO Auto-generated method stub
}
public void init() {
// TODO Auto-generated method stub
}
public void keyPressed(int keyCode) {
// TODO Auto-generated method stub
switch (keyCode) {
case Consts.KEY_UP:
if (index > 0) {
index--;
}
break;
case Consts.KEY_DOWN:
if (index <count) {
index++;
}
break;
}
}
public void keyReleased(int keyCode) {
// TODO Auto-generated method stub
}
public void paint(Graphics g) {
// TODO Auto-generated method stub
}
public void run() {
// TODO Auto-generated method stub
}
public int getMaxHeight() {
return maxHeight;
}
public int getPageHeight() {
return pageHeight;
}
public int getDeltaY() {
return deltaY;
}
public int getCount() {
return count;
}
public int getIndex() {
return index;
}
public int getOffsetY(){
return index*deltaY;
}
}
如何使用?看下面
import javax.microedition.lcdui.Graphics;
import com.tlt.util.Consts;
import com.tlt.util.Util;
import com.tlt.view.item.Container;
public class HelpPage extends CommonObject {
AppCanvas appCanvas;
String content;
String[] contents=null;
int x=5;
int fontHeight=20;
int y;//顯示的位置
Container container;
public HelpPage(AppCanvas appCanvas){
this.appCanvas=appCanvas;
}
public void close() {
// TODO Auto-generated method stub
contents=null;
content=null;
container=null;
}
public void init() {
// TODO Auto-generated method stub
y=titleHeight;
content="尊敬的用戶,唐路手機彩票網(wap.5bingo.cn) 與唐路彩票網(www.5bingo.cn)投注是同步統一 的, 網站現有用戶直接憑用戶名和密碼登錄即可投注, 新用戶請按照以下步驟進行投注:" +
"|第1步:免費注冊成為會員! 并請牢記您的用戶名、密碼!" +
"|第2步:充值!您可以使用支付寶和 財付通手機WAP支付方式充值,也可電腦登錄唐路彩票網(www.5bingo.cn) 輸入用戶名和密碼登錄后選擇網銀充值!" +
"|第3步:開始投注!登錄唐路手機彩票網(wap.5bingo.cn)選擇彩種依流程投注!" ;
contents=Util.splitString(content, Consts.small_font, Consts.SCREEN_WIDTH-2*x);
container=new Container(fontHeight*contents.length,Consts.SCREEN_HEIGHT-2*titleHeight,fontHeight);//這里需要注意!!!
}
public void keyPressed(int keyCode) {
// TODO Auto-generated method stub
container.keyPressed(keyCode);//這里需要注意!!!
switch (keyCode) {
case Consts.KEY_LS:
case Consts.KEY_OK:
break;
case Consts.KEY_RS:
appCanvas.setST(Consts.ST_SUBMENU);
break;
case Consts.KEY_UP:
break;
case Consts.KEY_DOWN:
break;
}
}
public void keyReleased(int keyCode) {
// TODO Auto-generated method stub
}
public void paint(Graphics g) {
// TODO Auto-generated method stub
int offsetY=container.getOffsetY();//這里需要注意!!!
drawContent(g,x,y-offsetY,contents);//一般都是y-offsetY
super.drawTopBar(g,0,0,Consts.title);
super.drawButtomBar(g,0,Consts.SCREEN_HEIGHT-titleHeight,new String[]{"","返回"});
}
public void run() {
// TODO Auto-generated method stub
}
private void drawContent(Graphics g,int x, int y,String[] contents){
g.setColor(0xffffff);
for(int i=0;i<contents.length;i++){
g.drawString(contents[i], x, y+i*fontHeight, Graphics.LEFT|Graphics.TOP);
}
}
}
只要注意3個地方就可以了。構造函數中需要告訴它內容總高度是多少,每屏顯示的高是多少,每按鍵一次移動的高度是多少,通過這3個參數就能確定滾動情況了。
還有就是在keyPressed和paint中注意調用它的兩個方法。
當然在內容過長時,旁邊加個滾動條就更好了,改一下Container的paint()方法就可以了。
另外這里顯示的都是文字,并且循環了for(int i=0;i<contents.length;i++)很多次,當然沒這個必要,萬一碰到有圖有文字的時候此類也可以用,不過可能需要在container.keyPressed(keyCode);上加些條件罷了。
下面是添加了滾動條之后的類,注意構造函數多了一個變量,用于表示滾動條從哪里開始畫:
import javax.microedition.lcdui.Graphics;
import com.tlt.util.Consts;
import com.tlt.view.CommonObject;
public class Container extends CommonObject {
int maxHeight;//內容總高度
int pageHeight;//每屏顯示的高
int deltaY;//每次移動的高度
int count;//需要移動的總次數
int index;//當前移動的次數
int offsetY;//向上移動的高度,那么y-offsetY就是開始畫的地方
int y;//開始畫滾動條的y坐標
public Container(int maxHeight,int pageHeight,int deltaY,int y){
this.maxHeight=maxHeight;
this.pageHeight=pageHeight;
this.deltaY=deltaY;
count=(maxHeight-pageHeight)/deltaY+1;
this.y=y;
}
public void close() {
// TODO Auto-generated method stub
}
public void init() {
// TODO Auto-generated method stub
}
public void keyPressed(int keyCode) {
// TODO Auto-generated method stub
switch (keyCode) {
case Consts.KEY_UP:
if (index > 0) {
index--;
}
break;
case Consts.KEY_DOWN:
if (index <count) {
index++;
}
break;
}
}
public void keyReleased(int keyCode) {
// TODO Auto-generated method stub
}
public void paint(Graphics g) {
// TODO Auto-generated method stub
drawScrollBar(g);
}
public void run() {
// TODO Auto-generated method stub
}
public void drawScrollBar(Graphics g){
if(count>0){//內容過長才需要有滾動條
int w=2;//滾動條寬,2個像素
int h;
if(pageHeight%count==0){//修正誤差
h=pageHeight/(count+1);
}else{
h=pageHeight/(count+1)+1;
}
g.setColor(0x555555);
g.fillRect(Consts.SCREEN_WIDTH-w, y, w, pageHeight);
g.setColor(0xcccccc);
g.fillRect(Consts.SCREEN_WIDTH-w, y+index*h, w, h);
}
}
public int getMaxHeight() {
return maxHeight;
}
public int getPageHeight() {
return pageHeight;
}
public int getDeltaY() {
return deltaY;
}
public int getCount() {
return count;
}
public int getIndex() {
return index;
}
public int getOffsetY(){
return index*deltaY;
}
}
加了滾動條之后的page:
import javax.microedition.lcdui.Graphics;
import com.tlt.util.Consts;
import com.tlt.util.Util;
import com.tlt.view.item.Container;
public class HelpPage extends CommonObject {
AppCanvas appCanvas;
String content;
String[] contents=null;
int x=5;
int fontHeight=20;
int y;//顯示的位置
Container container;
public HelpPage(AppCanvas appCanvas){
this.appCanvas=appCanvas;
}
public void close() {
// TODO Auto-generated method stub
contents=null;
content=null;
container=null;
}
public void init() {
// TODO Auto-generated method stub
y=titleHeight;
content="尊敬的用戶,唐路手機彩票網(wap.5bingo.cn) 與唐路彩票網(www.5bingo.cn)投注是同步統一 的, 網站現有用戶直接憑用戶名和密碼登錄即可投注, 新用戶請按照以下步驟進行投注:" +
"|第1步:免費注冊成為會員! 并請牢記您的用戶名、密碼!" +
"|第2步:充值!您可以使用支付寶和 財付通手機WAP支付方式充值,也可電腦登錄唐路彩票網(www.5bingo.cn) 輸入用戶名和密碼登錄后選擇網銀充值!" +
"|第3步:開始投注!登錄唐路手機彩票網(wap.5bingo.cn)選擇彩種依流程投注!" ;
contents=Util.splitString(content, Consts.small_font, Consts.SCREEN_WIDTH-2*x);
// container=new Container(fontHeight*contents.length,Consts.SCREEN_HEIGHT-2*titleHeight,fontHeight);
container=new Container(fontHeight*contents.length,Consts.SCREEN_HEIGHT-2*titleHeight,fontHeight,y);//注意加了y參數,滾動條從titleHeight開始畫
}
public void keyPressed(int keyCode) {
// TODO Auto-generated method stub
container.keyPressed(keyCode);
switch (keyCode) {
case Consts.KEY_LS:
case Consts.KEY_OK:
break;
case Consts.KEY_RS:
appCanvas.setST(Consts.ST_SUBMENU);
break;
case Consts.KEY_UP:
break;
case Consts.KEY_DOWN:
break;
}
}
public void keyReleased(int keyCode) {
// TODO Auto-generated method stub
}
public void paint(Graphics g) {
// TODO Auto-generated method stub
int offsetY=container.getOffsetY();
drawContent(g,x,y-offsetY,contents);
container.paint(g);//別忘了畫滾動條
super.drawTopBar(g,0,0,Consts.title);
super.drawButtomBar(g,0,Consts.SCREEN_HEIGHT-titleHeight,new String[]{"","返回"});
}
public void run() {
// TODO Auto-generated method stub
}
private void drawContent(Graphics g,int x, int y,String[] contents){
g.setColor(0xffffff);
for(int i=0;i<contents.length;i++){
g.drawString(contents[i], x, y+i*fontHeight, Graphics.LEFT|Graphics.TOP);
}
}
}
注意圖最右邊的滾動條了嗎?:)。滾動條顏色大小啊什么的需要自己根據實際情況“改裝”,我這個是最簡單的畫法了,呵呵。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

