当前位置:  编程技术>移动开发
本页文章导读:
    ▪ProgressDialog的位置设立        ProgressDialog的位置设置 ProgressDialog dialog = ProgressDialog.show(AContext, "Test", "On the bottom");                 dialog.getWindow().setGravity(Gravity.BOTTOM);  ......
    ▪ Gallery 3D 代码分析之统观        Gallery 3D 代码分析之概览 Gallery 3D UI 非常炫, 如下图所示:                                   需要明确的几个问题 伪 2D 还是 3D: gallery3d 基于 android SDK OpenGL ES 接口开发,使.........
    ▪ 相仿小球列表的选择控件(9宫格)       类似小球列表的选择控件(9宫格) 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; pu.........

[1]ProgressDialog的位置设立
    来源: 互联网  发布时间: 2014-02-18
ProgressDialog的位置设置

ProgressDialog dialog = ProgressDialog.show(AContext, "Test", "On the bottom"); 
                dialog.getWindow().setGravity(Gravity.BOTTOM); 


    
[2] Gallery 3D 代码分析之统观
    来源: 互联网  发布时间: 2014-02-18
Gallery 3D 代码分析之概览

Gallery 3D UI 非常炫, 如下图所示:

                    

          

 

需要明确的几个问题 伪 2D 还是 3D:

gallery3d 基于 android SDK OpenGL ES 接口开发,使用了 Java API,没有使用 NDK。

图片如何显示:

在 OpenGL ES 中,要显示图片,需要定义一个四边形,然后把图片当作 texture 贴到四边形上。

布局及特效如何实现:

这是 gallery3d 的精华所在,需认真分析。

大数据量图片/cache 如何实现和管理:

gallery3d 有缓冲区的设计,非常不错,需要认真分析。

动画引擎:

简单的讲,动画引擎对外可表现为一个接口:

float animate(float initVal, float *currentVal, long timeElapsed, long duration)

 

即,给定初始值(initVal),动画引擎根据逝去的时间(timeElapsed)和动画总时间(duration)计算下一帧对应的值 (currentVal),这个值可能是位置坐标,也可能是一个矩阵 matrix,或者是其它的属性。显示一帧就调用该函数更新actor的属性,各个帧连起来显示就成了动画。

3D坐标与2D坐标的转换:

这个需要仔细分析。

使用缓冲区对象 (GL_OES_vertex_buffer_object)

OpenGL ES 中的顶点数组使得几何图元的显示方便了很多,但是如果每次都要向 OPENGL 发送一大块数据,而这数据其实并没有修改过,那么这传输就是冗余的。所以 这里添加了缓冲区对象,将顶点数组存储在服务器端的缓冲区对象中。

gallery3d 使用了缓冲区对象来保存顶点数据。

 

参考:

Nexus One Gallery on Android

构件图

gallery3d 的基本构件组成及其关系如下所示:


    
[3] 相仿小球列表的选择控件(9宫格)
    来源: 互联网  发布时间: 2014-02-18
类似小球列表的选择控件(9宫格)
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);
		}
		
	}

}




    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
NOSQL iis7站长之家
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3