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

當顯示內容過多時的滾屏類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條評論
主站蜘蛛池模板: 欧美第一页在线观看 | 久久99国产一区二区三区 | 久草在线中文视频 | 四虎激情影院 | 日韩成人精品在线 | 国产成人综合久久亚洲精品 | 俺去也最新网站 | 91视频欧美| 久久黄色影院 | 人人狠狠综合久久亚洲88 | 色八戒国产一区二区三区四区 | bbw老妇xxx| 久久婷婷五色综合夜啪 | 国产农村妇女一级毛片 | 免费一级特黄欧美大片久久网 | 亚洲精品99久久久久中文字幕 | 日本不卡影院 | 91精品国产色综合久久 | 玖玖在线资源站 | 久草在在线视频免费 | 久久99久久99精品免观看麻豆 | 中文字幕在线观看不卡视频 | 亚洲精品久久久久久久福利 | 国产日韩一区二区三区在线播放 | 欧美一级午夜免费视频你懂的 | 国产一区二区三区免费播放 | 99这里只有精品 | 国产性色视频 | 香蕉视频在线观看www | 亚洲综合无码一区二区 | 特级毛片a级毛免费播放 | 久久精品6| 四虎影视永久在线精品免费 | 91青青青青青爽在线 | 3d动漫精品成人一区二区三 | 色片免费在线观看 | 日韩中文字幕视频在线 | 亚洲成网站www久久九 | 色婷婷精品 | 欧美日韩一区在线观看 | 精品国产区一区二区三区在线观看 |