`

类似小球列表的选择控件(9宫格)

    博客分类:
  • j2me
阅读更多
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import com.tlt.util.Consts;
import com.tlt.util.Util;
import com.tlt.view.AppCanvas;
import com.tlt.view.CommonObject;

public class BallList extends CommonObject {

	AppCanvas appCanvas;
//	private Image[] balls;
//	int ballWidth;
	int ballCount;//小球个数
	public boolean[] selected;//选中的小球
	public boolean isLastLine,isFirstLine;//红框是否在最后一行或第一行
	public int selectedCount;//选中的小球个数
	public int min,max;//数字从min开始到max结束
	public int index=0;//总索引index=indexY*col+indexX
	public int indexX,indexY;
	public int col=10,row;
	public boolean isFocus=false;//是否显示小红框
	public BallList(AppCanvas appCanvas,int min,int max){
		this.appCanvas=appCanvas;
		this.min=min;
		this.max=max;
		this.ballCount=max-min+1;
//		balls=new Image[3];
//		balls[0]=Util.getImage("/ball.png");
//		balls[1]=Util.getImage("/ball_red.png");
//		balls[2]=Util.getImage("/ball_blue.png");
//		ballWidth=balls[0].getWidth();
	}
	public void close() {
		// TODO Auto-generated method stub
//		balls=null;
	}

	public void init() {
		// TODO Auto-generated method stub
		//根据屏幕大小判断一行显示小球的个数  
		if(Consts.SCREEN_HEIGHT>=300){
			col=10;
		}
		else if(Consts.SCREEN_HEIGHT>=196){
			col=8;
		}
		else if(Consts.SCREEN_HEIGHT>=128){
			col=4;
		}
		//计算行数
		if(ballCount%col==0){
			row=ballCount/col;
		}else{
			row=ballCount/col+1;
		}
		resetPosition();		
		selected=new boolean[ballCount];
	}
/**
	 * 设置红框的位置
	 */
	public void resetPosition(){
		index=5;
		indexX=5;
		indexY=0;
	}
	public void keyPressed(int keyCode) {
		// TODO Auto-generated method stub
		switch (keyCode) {
		case Consts.KEY_LS:
			break;
		case Consts.KEY_OK:
			selected[index]=!selected[index];
			if(selected[index]){
				selectedCount++;
			}else{
				selectedCount--;
			}
			break;
		case Consts.KEY_RS:
			break;
		case Consts.KEY_UP:
			index-=col;
			indexY--;
			if(indexY<=0){
				isFirstLine=true;
			}
			isLastLine=false;
			break;
		case Consts.KEY_DOWN:
			index+=col;
			indexY++;
			if(index>ballCount-1){
				index-=col;
				indexY--;
				isLastLine=true;
			}
			isFirstLine=false;
			break;
		case Consts.KEY_LEFT:
			if(index>0){
				index--;
				indexX--;
				if((index+1)%col==0){
					indexY--;
					indexX=col-1;
//					if(indexY<0){
//						indexY=0;
//						indexX=0;
//					}
				}
			}
			break;
		case Consts.KEY_RIGHT:
			if(index<ballCount-1){
				index++;
				indexX++;
				if(index%col==0){
					indexY++;
					indexX=0;
				}
			}
			break;
		}
	}

	public void keyReleased(int keyCode) {
		// TODO Auto-generated method stub

	}
	public void paint(Graphics g){
		
	}
	public void paint(Graphics g,int x, int y) {
		// TODO Auto-generated method stub
		drawBall(g,x,y);
	}

	public void run() {
		// TODO Auto-generated method stub

	}
	
	private void drawBall(Graphics g,int x, int y){
		int j=0;
		int gapX=0;
		if((Consts.SCREEN_WIDTH-col*ballWidth)%(col+1)==0){
			gapX=(Consts.SCREEN_WIDTH-col*ballWidth)/(col+1);
		}else{
			gapX=(Consts.SCREEN_WIDTH-col*ballWidth)/(col+1)+1;
		}
		int gap=ballWidth+gapX;
		for(int i=0;i<ballCount;i++){
			g.drawImage(selected[i]?balls[1]:balls[0], x+gapX+gap*i-j*(col*gap), y+j*gap, Graphics.TOP|Graphics.LEFT);
				g.setColor(selected[i]?0xffffff:0x0);
				g.drawString((i+min)+"", x+gapX+gap*i-j*(col*gap)+(ballWidth>>1),  y+j*gap+(ballWidth>>1)+8, Graphics.BASELINE|Graphics.HCENTER);
			if((i+1)%col==0){
				j++;
			}
		}
		
		//小红框
		if(isFocus){
			g.setColor(0xff0000);
			g.drawRect(x+gapX+indexX*gap, y+indexY*gap, ballWidth-1, ballWidth-1);
		}
		
	}

}



  • 大小: 9.6 KB
分享到:
评论

相关推荐

    Starling9宫格类库

    在提供的文件列表"yy"中,可能包含了实现9宫格功能的源代码、示例项目或相关文档。为了充分利用这个类库,你需要解压并研究这些文件,理解其工作原理,并将其集成到你的Starling项目中。通过实践和调试,你将能够...

    iphone 9宫格实现

    在iOS开发中,创建一个9宫格界面是常见的任务,特别是在设计用户交互界面时,用于展示功能模块或者图片。这个场景通常涉及到自定义UICollectionView或UItableView的实现,因为这两种组件都可以方便地创建网格布局。...

    android9宫格解锁

    这是 android手机 9宫格解锁软件 任何一款手机都可以装 经测试 100%可信

    基于QT的9宫格输入法

    基于QT实现的9宫格数字,字母输入法。支持密码类型输入,输入之后显示.代替输入内容

    9宫格后台模板

    9宫格后台模板是一种常见的网页设计布局方式,尤其在后台管理系统中广泛应用。这种设计模式将页面分割成9个等大小的方格,每个方格可以承载不同的功能模块或信息区块,使得界面清晰、操作直观,提高了用户的使用效率...

    Android9宫格

    在Android开发中,"9宫格"是一种常见的用户界面元素,尤其在设置、应用选择等场景下被广泛应用。9宫格通常由一个3x3的网格组成,每个小方格可以代表一个功能或者链接到相应的操作。这个设计简洁直观,易于用户理解和...

    9宫格抽奖源码

    在IT行业中,开发互动式应用是提升用户体验和吸引用户参与的有效方式之一,"9宫格抽奖源码"就是这样一种应用的实例。这个源码提供了一个趣味性和互动性兼备的抽奖功能,通常用于营销活动或者游戏场景,让用户有机会...

    9宫格FLASH导航

    9宫格FLASH导航是一种常见的网页设计元素,常用于构建网站的主菜单或导航系统。它以其独特的视觉效果和交互性,吸引用户注意力并提供清晰的网站结构。在本主题中,我们将深入探讨9宫格FLASH导航的设计原理、实现方法...

    android 9宫格显示

    在Android开发中,9宫格显示通常指的是使用GridView控件来展示一组小图标或图片,形成类似九宫格的布局效果。GridView是Android提供的一种基于网格的布局管理器,它可以将视图按照行列的方式进行排列,常用于创建...

    9宫格填空程序

    标题中的“9宫格填空程序”指的是一个基于数学游戏——九宫格(也称幻方)的编程实现。九宫格是一种将1到9的数字填入3x3的正方形网格,使得每行、每列以及两条对角线上的数字之和都相等的智力游戏。这个程序为用户...

    symiban 3rd 自定义网格控件 (N宫格)

    在移动应用开发中,尤其是在Android平台上,这种控件能帮助开发者构建类似九宫格、十六宫格等多格布局的界面,适用于展示图标、菜单项或进行个性化定制的界面设计。这个控件的自定义性非常强,可以适应各种屏幕尺寸...

    html大屏自定义宫格,6宫格9宫格12宫格自定义替换合并

    最近有个大屏需要用到自定义大屏,还是拖动替换内容的,使用12宫格的形式 于是使用jquery写了个拖动各种宽高替换宫格位置的demo 比较简单,有数据提交和回显替换的表格功能 ...支持自定义6宫格9宫格12宫格等

    安卓手机9宫格解锁数量

    9宫格解锁的每一个顺序可以看作是一个排列问题,从9个数字中选择5个(因为开始和结束点固定),不考虑顺序,这相当于组合问题C(9,5)。 根据组合公式C(n,k)=n!/(k!(n-k)!),我们可以计算出9宫格解锁的所有可能路径...

    9宫格横竖等于4 c++编程实现

    根据给定的信息,本文将对“9宫格横竖等于4”的C++编程实现进行详细的解析,包括数学原理、程序逻辑以及代码实现等几个方面。 ### 一、问题背景与数学原理 首先,我们需要理解“9宫格横竖等于4”这一概念。这实际...

    9宫格生成程序.exe

    本程序提供图片、动图以及视频等资源的9宫格生成。

    7-1-GridView-9宫格.rar

    在Android开发中,GridView是一个非常重要的视图组件,它用于以网格形式展示数据,通常用于创建类似相册、应用列表等界面。在这个“7-1-GridView-9宫格.rar”压缩包中,包含了关于如何实现一个9宫格布局的知识点,...

    javascript HTML5 APP网页游戏_9宫格,16宫格抽奖大转盘(源代码)

    javascript H5 APP网页游戏_九宫格,16宫格抽奖大转盘(源代码)

    jQuery 9宫格抽奖

    【jQuery 9宫格抽奖】是一种常见的互动设计,常用于线上活动或年会抽奖环节,为用户提供直观且吸引人的参与体验。此插件基于流行的JavaScript库jQuery构建,旨在实现一个适用于移动端和电脑端的可自定义抽奖界面。...

    Android 9宫格解锁

    在Android系统中,9宫格解锁是一种常见的用户界面设计,用于增强设备的安全性和用户体验。它借鉴了QQ应用的解锁方式,允许用户通过绘制特定的手势路径来解锁屏幕,而不是简单的输入PIN码或滑动图案。这种解锁方式既...

    C# 9宫格或8数码拼图游戏

    【C# 9宫格或8数码拼图游戏】是一种基于C#编程语言开发的智力游戏,也称为“滑动拼图”或“15拼图”。它在计算机科学领域中是一个经典的问题,通常用于教学和算法实践。这个游戏的目标是通过移动空格,将打乱顺序的...

Global site tag (gtag.js) - Google Analytics