很多時候,由于手機屏幕太小,一下子顯示不了那么多內容,這個時候就需要通過按鍵一點一點的顯示下面的內容(相當于瀏覽器中的滾動條的功能)。我做了一個類,能夠一點一點的顯示內容。其實就是個容器,把內容統統放在容器中,計算全部內容的高度,計算每屏顯示的高,每次移動的高度,需要移動的總次數,通過這些量就能確定滾動情況了。
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元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
