`

当显示内容过多时的滚屏类Container.java

    博客分类:
  • j2me
阅读更多
很多时候,由于手机屏幕太小,一下子显示不了那么多内容,这个时候就需要通过按键一点一点的显示下面的内容(相当于浏览器中的滚动条的功能)。我做了一个类,能够一点一点的显示内容。其实就是个容器,把内容统统放在容器中,计算全部内容的高度,计算每屏显示的高,每次移动的高度,需要移动的总次数,通过这些量就能确定滚动情况了。
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);
		}
		
	}

}


注意图最右边的滚动条了吗?:)。滚动条颜色大小啊什么的需要自己根据实际情况“改装”,我这个是最简单的画法了,呵呵。
  • 大小: 4.5 KB
  • 大小: 5.3 KB
  • 大小: 6.6 KB
分享到:
评论

相关推荐

    纵向定位滚屏特效代码.zip

    在这种滚屏特效中,选项卡可能被用来组织页面的不同部分,当用户滚动时,每个选项卡的内容会按顺序展示出来,提供了一种高效的内容导航方式。 在【压缩包子文件的文件名称列表】中,只有一个文件名为"jiaoben18698...

    自动滚屏按钮.rar

    自动滚屏按钮.rar自动滚屏按钮.rar自动滚屏按钮.rar自动滚屏按钮.rar自动滚屏按钮.rar自动滚屏按钮.rar自动滚屏按钮.rar自动滚屏按钮.rar自动滚屏按钮.rar自动滚屏按钮.rar自动滚屏按钮.rar自动滚屏按钮.rar自动滚屏...

    滚屏截图工具.rar

    滚屏截图工具是一种实用的计算机软件,主要用于捕捉屏幕上的长幅内容,比如网页、文档或者聊天记录等。在日常工作中,我们经常会遇到需要截取整个页面而非单一屏幕的情况,这时滚屏截图工具就显得尤为方便。它允许...

    网站内容滚屏显示

    内容自动向上滚屏显示

    Android应用源码之广告自动滚屏播放应用.zip

    这可以通过Java的`java.util.Timer`类或者Android的`Handler`和`Runnable`实现。 4. **广告加载与展示**: - 使用AdMob API加载广告,可能涉及到异步请求,需要处理加载成功、失败、空闲(No填充)等多种状态。 -...

    Android应用源码之广告自动滚屏播放应用.zip项目安卓应用源码下载

    Android应用源码之广告自动滚屏播放应用.zip项目安卓应用源码下载Android应用源码之广告自动滚屏播放应用.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考

    广告自动滚屏播放应用.zip

    在Android平台上,开发一款广告自动滚屏播放应用是一项常见的任务,尤其对于那些希望在移动设备上展示广告内容的开发者来说。这个"广告自动滚屏播放应用"源码提供了一个很好的学习资源,帮助开发者深入理解如何在...

    小程序源码 广告自动滚屏播放应用.zip

    【小程序源码 广告自动滚屏播放应用】 在当今移动互联网时代,小程序因其轻量化、便捷性成为了众多企业和开发者的选择。"小程序源码 广告自动滚屏播放应用.zip"是一个专门针对小程序开发的广告展示解决方案,它利用...

    安卓图片轮播广告轮播自动滚屏相关-广告自动滚屏播放应用.zip

    广告自动滚屏播放应用.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。

    08 滚屏和分页.pdf

    数据显示,互联网用户有相当一部分时间花在了滚屏上,因此,优化滚动体验对于任何网站都是至关重要的。 总的来说,产品设计中的滚屏与分页选择是一个需要综合考虑用户需求、任务特性和设备兼容性的决策。设计师应...

    广告自动滚屏播放应用.rar

    标题中的“广告自动滚屏播放应用”暗示了这个压缩包可能包含一个软件或者代码库,用于实现自动滚动播放广告的功能。这种技术在数字媒体、广告行业以及网站设计中较为常见,目的是吸引用户的注意力并提高广告的曝光率...

    广告自动滚屏播放应用.zip安卓程序项目源码资源下载

    4. **定时滚动**:使用Handler或CountDownTimer来实现定时滚动效果,定期更新显示的广告内容。 5. **动画效果**:为了实现平滑的滚动效果,可能需要用到Android的动画框架,如ObjectAnimator或Transition API。 6....

    安卓Andriod源码——广告自动滚屏播放应用.zip

    在安卓(Android)平台上开发应用时,源码的掌握对于开发者来说至关重要,特别是涉及到特定功能如广告自动滚屏播放的应用。这个"安卓Andriod源码——广告自动滚屏播放应用.zip"提供了一个完整的示例,帮助我们了解...

    Android高级应用源码-广告自动滚屏播放应用.zip

    在Android平台上,开发一款广告自动滚屏播放应用是一项常见的任务,尤其对于那些希望在移动设备上展示广告内容的开发者来说。这个"Android高级应用源码-广告自动滚屏播放应用.zip"提供了一个实用的示例,它展示了...

    安卓Android源码——广告自动滚屏播放应用.zip

    在安卓(Android)平台上开发应用程序时,有时我们需要实现广告的自动滚屏播放功能,以吸引用户的注意力并提高广告的曝光率。本项目“安卓Android源码——广告自动滚屏播放应用.zip”提供了一个完整的实现方案,它...

    Android应用源码之广告自动滚屏播放应用.rar

    在Android平台上,开发一款广告自动滚屏播放应用是一项常见的任务,尤其对于那些希望在应用程序中嵌入广告以增加收入的开发者来说。这个压缩包“Android应用源码之广告自动滚屏播放应用.rar”可能包含了一个完整的...

Global site tag (gtag.js) - Google Analytics