亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

當顯示內容過多時的滾屏類Container.java

系統 1725 0
很多時候,由于手機屏幕太小,一下子顯示不了那么多內容,這個時候就需要通過按鍵一點一點的顯示下面的內容(相當于瀏覽器中的滾動條的功能)。我做了一個類,能夠一點一點的顯示內容。其實就是個容器,把內容統統放在容器中,計算全部內容的高度,計算每屏顯示的高,每次移動的高度,需要移動的總次數,通過這些量就能確定滾動情況了。
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.java
當然在內容過長時,旁邊加個滾動條就更好了,改一下Container的paint()方法就可以了。
另外這里顯示的都是文字,并且循環了for(int i=0;i<contents.length;i++)很多次,當然沒這個必要,萬一碰到有圖有文字的時候此類也可以用,不過可能需要在container.keyPressed(keyCode);上加些條件罷了。
當顯示內容過多時的滾屏類Container.java

下面是添加了滾動條之后的類,注意構造函數多了一個變量,用于表示滾動條從哪里開始畫:
    
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);
		}
		
	}

}

  

當顯示內容過多時的滾屏類Container.java
注意圖最右邊的滾動條了嗎?:)。滾動條顏色大小啊什么的需要自己根據實際情況“改裝”,我這個是最簡單的畫法了,呵呵。

當顯示內容過多時的滾屏類Container.java


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美一级毛片图 | 久久精品国产精品亚洲综合 | 国产精品亚洲欧美一级久久精品 | 嫩操影院| 亚洲热久久| 国产色产综合色产在线观看视频 | 亚洲欧美日韩国产综合久 | 性欧美www| 国产成人精品一区二区视频 | 香蕉久久网 | 日韩综合一区 | 特级全黄一级毛片免费 | 一区二区三区在线免费视频 | 久久cao| 视频播放在线观看精品视频 | 久久视频在线观看免费 | 久久99精品视频 | 国产精品久久久久久久久久久久 | 一本一道久久 | 亚洲国产精品免费视频 | 午夜私人影院粉色视频我要 | 另类综合网| 亚洲成色在线综合网站 | 国产亚洲欧美日韩国产片 | 久久图片 | 在线成人aa在线看片 | 日本人的色道www免费一区 | 91视频官网 | 99热这里只有精品8 99热这里只有精品88 | 免费香蕉依人在线视频久 | 91九色蝌蚪91pornv在线 | 亚洲综合成人网在线观看 | 亚洲国产99在线精品一区二区 | 香蕉网站狼人久久五月亭亭 | 中文字幕日本精品一区二区三区 | 天天操天天摸天天射 | 亚洲另类第一页 | 国产精品第一 | 久久久久亚洲视频 | 欧美爱爱爱爱免费视频 | 四虎影视库国产精品一区 |