对于Android游戏开发我们不得不像iPhone那样思考兼容Android平板电脑,对于苹果要考虑iPad、iPhone 3GS和iPhone 4等屏幕之间的兼容性,对于几乎所有的分辨率Android123总结了大约超过20中粉笔阿女郎的大小和对应关系,对于开发Android游戏而言可以 考虑到未来的3.0以及很多平板电脑的需要。
QVGA = 320 * 240;
WQVGA = 320 * 480;
WQVGA2 = 400 * 240;
WQVGA3 = 432 * 240;
HVGA = 480 * 320;
VGA = 640 * 480;
WVGA = 800 * 480;
WVGA2 = 768 * 480;
FWVGA = 854 * 480;
DVGA = 960 * 640;
PAL = 576 * 520;
NTSC = 486 * 440;
SVGA = 800 * 600;
WSVGA = 1024 * 576;
XGA = 1024 * 768;
XGAPLUS = 1152 * 864;
HD720 = 1280 * 720;
WXGA = 1280 * 768;
WXGA2 = 1280 * 800;
WXGA3 = 1280 * 854;
SXGA = 1280 * 1024;
WXGA4 = 1366 * 768;
SXGAMINUS = 1280 * 960;
SXGAPLUS = 1400 * 1050;
WXGAPLUS = 1440 * 900;
HD900 = 1600 * 900;
WSXGA = 1600 * 1024;
WSXGAPLUS = 1680 * 1050;
UXGA = 1600 * 1200;
HD1080 = 1920 * 1080;
QWXGA = 2048 * 1152;
WUXGA = 1920 * 1200;
TXGA = 1920 * 1400;
QXGA = 2048 * 1536;
WQHD = 2560 * 1440;
WQXGA = 2560 * 1600;
QSXGA = 2560 * 2048;
QSXGAPLUS = 2800 * 2100;
WQSXGA = 3200 * 2048;
QUXGA = 3200 * 2400;
QFHD = 3840 * 2160;
WQUXGA = 3840 * 2400;
HD4K = 4096 * 2304;
HXGA = 4096 * 3072;
WHXGA = 5120 * 3200;
HSXGA = 5120 * 4096;
WHSXGA = 6400 * 4096;
HUXGA = 6400 * 4800;
SHV = 7680 * 4320;
WHUXGA = 7680 * 4800;
现今的主流手机各类及分辨率:
==== 320x480 ====
1. 三星 S5830 Galaxy Ace
2. 索尼爱立信 X8 (E15i)
3. 华为 U8500
4. Motorola XT502
5. LG P503
6. 酷派 D530
7. LG GT540
8. 夏普 SH8118U
9. 天语 W606 (估计运行困难)
10. 中兴 R750
11. 华为 U8500-HiQQ (估计运行困难)
12. 酷派 W711(估计运行困难)
13. 首派 A60
14. 三星I7500
15. HTC G6 Legend
16. Motorola ME600
17. Motorola CLIQ
18. 三星 I5700
19. HTC Aria (G9)
20. LG GW620
21. 华为 C8600
22. Motorola ME501
23. LG P500
==== 480x800 ====
1. HTC Desire (G7)
2. HTC A9191
3. 三星 I9003
4. 联想W101 乐phone (1.6系统非原生)
5. 夏普 SH8128
6. 三星 I9088
7. 中兴 V880
8. 三星 I909
9. Motorola A1680
10. 联想W100 乐phone(1.6)
11. 联想C101
12. 酷派 N930
13. 三星 I9088
14. HTC 双擎T9199
15. HTC A9191
16. 中兴 V9E
17. 三星I909 (SPhone)
18. 酷派 N930
19. 华为 U8800
20. HTC Desire HD (G10)
21. 三星 I9010
22. 夏普 SH7218U(新机)
23. Google Nexus One (G5)
24. Google Nexus S
25. 三星I9000
26. 三星T959
27. 三星W899
28. HTC Incredible S (S710e)
29. HTC Desire Z
30. HTC EVO 4G
31. 戴尔Mini5 (Streak)
32. 三星I9020
33. 戴尔Venue
==== 640x960 ====
1. 魅族 M9
==== 480x854 ====
1. Motorola XT702
2. Motorola XT711
3. Motorola ME722 (里程碑2)
4. Motorola XT800
5. Motorola ME811 (Droid X)
6. Motorola ME525
7. Motorola XT800+
8. 索尼爱立信 X10i
9. Motorola XT806Ix
==== 320x240 ====
1. SAMSUNG S5570
2. HTC A3366 Wildfire
3. Motorola ME511
4. Motorola XT301
5. 华为 C8500
6. HTC A3380
7. 三星 I5508
8. HTC A3360
9. 中兴 X850
10. Motoroal XT300
11. 索尼爱立信 U201
==== 600x1024 ====
1. 三星 Galaxy P1000
该应用程序是基于Android平台针对意甲的一些信息查询:
主要功能:
1.获取意甲最新新闻,包括各个强队和顶级球星的最新新闻;
2.实时更新的意甲射手榜,意甲数据,积分榜和各轮赛程;
3.关于意甲的精彩图片;
软件截图:


软件下载:
可以在Google Market,应用汇,机锋市场,安卓市场或优亿市场中搜索“我爱意甲”来下载;
该应用程序是基于Android平台针对西甲的一些信息查询:
主要功能:
1.获取西甲最新新闻,包括各个强队和顶级球星的最新新闻;
2.实时更新的西甲射手榜,西甲数据,积分榜和各轮赛程;
3.关于西甲的精彩图片;
软件截图:




软件下载:
可以在Google Market,应用汇,机锋市场,安卓市场或优亿市场中搜索“我爱西甲”来下载;
该应用程序是基于Android平台针对英超的一些信息查询:
主要功能:
1.获取英超最新新闻,包括各个强队和顶级球星的最新新闻;
2.实时更新的英超射手榜,英超数据,积分榜,各轮赛程和本轮赛程赛果;
3.关于英超的精彩图片;
软件截图:




软件下载:
可以在Google Market,应用汇,机锋市场,安卓市场或优亿市场中搜索“我爱英超”来下载;
在OPhone编程中有时候需要对图片做特殊的处理,比如将图片做出黑白的,或者老照片的效果,有时候还要对图片进行变换,以拉伸,扭曲等等。这些效果在OPhone中有很好的支持,通过颜色矩阵(ColorMatrix)和坐标变换矩阵(Matrix)可以完美的做出上面的所说的效果,下面将分别介绍这两个矩阵的用法和相关的函数。



public class CMatrix extends Activity {
private Button change;
private EditText [] et=new EditText[20];
private float []carray=new float[20];
private MyImage sv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
change=(Button)findViewById(R.id.set);
sv=(MyImage)findViewById(R.id.MyImage);
for(int i=0;i<20;i++){
et[i]=(EditText)findViewById(R.id.indexa+i);
carray[i]=Float.valueOf(et[i].getText().toString());
}
change.setOnClickListener(l);
}
private Button.OnClickListener l=new Button.OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
getValues();
sv.setValues(carray);
sv.invalidate();
}
};
public void getValues(){
for(int i=0;i<20;i++){
carray[i]=Float.valueOf(et[i].getText().toString());
}
}
}
MyImage类继承自View类:
public class MyImage extends View {
private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
private Bitmap mBitmap;
private float [] array=new float[20];
private float mAngle;
public MyImage(Context context,AttributeSet attrs) {
super(context,attrs);
mBitmap = BitmapFactory.decodeResource(context.getResources(),
R.drawable.test);
invalidate();
}
public void setValues(float [] a){
for(int i=0;i<20;i++){
array[i]=a[i];
}
}
@Override protected void onDraw(Canvas canvas) {
Paint paint = mPaint;
paint.setColorFilter(null);
canvas.drawBitmap(mBitmap, 0, 0, paint);
ColorMatrix cm = new ColorMatrix();
//设置颜色矩阵
cm.set(array);
//颜色滤镜,将颜色矩阵应用于图片
paint.setColorFilter(new ColorMatrixColorFilter(cm));
//绘图
canvas.drawBitmap(mBitmap, 0, 0, paint);
Log.i("CMatrix", "--------->onDraw");
}
}











CooMatrix类:
public class CooMatrix extends Activity {
private Button change;
private EditText [] et=new EditText[9];
private float []carray=new float[9];
private MyImage sv;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
change=(Button)findViewById(R.id.set);
sv=(MyImage)findViewById(R.id.MyImage);
for(int i=0;i<9;i++){
et[i]=(EditText)findViewById(R.id.indexa+i);
carray[i]=Float.valueOf(et[i].getText().toString());
}
change.setOnClickListener(l);
}
private Button.OnClickListener l=new Button.OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
getValues();
sv.setValues(carray);
sv.invalidate();
}
};
public void getValues(){
for(int i=0;i<9;i++){
carray[i]=Float.valueOf(et[i].getText().toString());
}
}
}
MyImage类继承自View类:
public class MyImage extends View {
private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
private Bitmap mBitmap;
private float [] array=new float[9];
public MyImage(Context context,AttributeSet attrs) {
super(context,attrs);
mBitmap = BitmapFactory.decodeResource(context.getResources(),
R.drawable.ic_launcher_android);
invalidate();
}
public void setValues(float [] a){
for(int i=0;i<9;i++){
array[i]=a[i];
}
}
@Override protected void onDraw(Canvas canvas) {
Paint paint = mPaint;
canvas.drawBitmap(mBitmap, 0, 0, paint);
//new 一个坐标变换矩阵
Matrix cm = new Matrix();
//为坐标变换矩阵设置响应的值
cm.setValues(array);
//按照坐标变换矩阵的描述绘图
canvas.drawBitmap(mBitmap, cm, paint);
Log.i("CMatrix", "--------->onDraw");
}
}


- setScale(float sx, float sy, float px, float py) 放大
- setSkew(float kx, float ky, float px, float py) 斜切
- setTranslate(float dx, float dy) 平移
- setRotate(float degrees, float px, float py) 旋转


Android中提供了判断手势的接口,所有我们可以根据提供的API来实现各种各样的手势功能来提高手机应用的用户体验。
下面是我写的一段小Demo:
GestureActivity.java
public class GestureActivity extends Activity {
private GestureDetector gestureDetector;
private Screen screen;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
gestureDetector = new GestureDetector(this,onGestureListener);
//得到屏幕的大小
screen = GestureUtils.getScreenPix(this);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
GestureDetector.OnGestureListener onGestureListener = new GestureDetector.SimpleOnGestureListener(){
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
float x = e2.getX() - e1.getX();
float y = e2.getY() - e1.getY();
//限制必须得划过屏幕的1/3才能算划过
float x_limit = screen.widthPixels / 3;
float y_limit = screen.heightPixels / 3;
float x_abs = Math.abs(x);
float y_abs = Math.abs(y);
if(x_abs >= y_abs){
//gesture left or right
if(x > x_limit || x < -x_limit){
if(x>0){
//right
show("right");
}else if(x<0){
//left
show("left");
}
}
}else{
//gesture down or up
if(y > y_limit || y < -y_limit){
if(y>0){
//down
show("down");
}else if(y<0){
//up
show("up");
}
}
}
return true;
}
};
private void show(String value){
Toast.makeText(this, value, Toast.LENGTH_SHORT).show();
}
}
GestureUtils.java
public class GestureUtils {
//获取屏幕的大小
public static Screen getScreenPix(Context context) {
DisplayMetrics dm = new DisplayMetrics();
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
windowManager.getDefaultDisplay().getMetrics(dm);
return new Screen(dm.widthPixels,dm.heightPixels);
}
public static class Screen{
public int widthPixels;
public int heightPixels;
public Screen(){
}
public Screen(int widthPixels,int heightPixels){
this.widthPixels=widthPixels;
this.heightPixels=heightPixels;
}
@Override
public String toString() {
return "("+widthPixels+","+heightPixels+")";
}
}
}

John F. Kennedy-“Ask not what your twitter can do for you, ask what you can do for your twitter.”
肯尼迪总统-“不要问你的微博能为你做些什么,问一下你自己能为微博做些什么?”
(原文:”Ask not what your country can do for you; ask what you can do for your country.“不要问你国家能为你做些什么而问你能为你国家做些什么。)

William Shakespeare -“There is nothing either good or bad but twittering makes it so.”
莎士比亚-“事物本身无所谓好坏之分,只是看你如何围脖它了。”
(原文:”There is nothing either good or bad, but thinking makes it so “事物本身无所谓好坏之分,只是人们的主观认知使然。)

Confucious -“Men’s natures are alike; it is their twitters that separate them.”
孔子-“性相近也,微博相远也”
(原文:”Men’s natures are alike, it is their habits that carry them farapart.“性相近也,习相远也.——文言文注解:人生下来的时候都是好的,只是由于成长过程中,后天的学习环境不一样,性情也就有了好与坏的差别。)

Alexander Pope -“To err is human, to twitter is divine.”
“会犯错是人,但会织围脖就是圣贤了。”——亚历山大波普(1688年5月21日- 1744年5月30日)是18世纪英国诗人。
(原文:”To Err Is Human, To Forgive Divine”会犯错是人,但会原谅别人过错就是圣贤了。)

Bill Gates -“140 characters ought to be enough for anybody.”
比尔盖茨-“140字应该对谁都足够啦。”
(原文:”640K ought to be enough for anybody.” 640kb的速度应该对谁都足够啦。)

Benjamin Franklin -“Mankind naturally and generally loved to be retweeted.”
本杰明·富兰克林-”人类天生就是喜欢被围脖转发。”
(原文:”Mankind naturally and generally love to be flattered.”人类天生就是喜欢被奉承。)

Franklin Delano Roosevelt -“The only thing to twitter about is twittering itself.”
罗斯福美国总统-“只有一个东西应该被围脖,那就是‘织围脖’本身。”
(原文:”Only Thing We Have to Fear Is Fear Itself”只有一个东西应该被恐惧,那就是恐惧本身。)

Dr. Victor Hugo Lindlahr -“You are what you tweet”
“从你的微博可以看出你是一个怎样的人。”——维克多雨果林德拉尔博士是美国健康食品和减肥的先驱。
(原文:”You Are What You Eat”从你吃的食物可以看出你是一个怎样的人?)

Mark Twain -“Twitter is mankind’s greatest blessing.”
马克吐温哦——“微博是人类得到最好的恩赐。”
(英文原文:”Humor is mankind’s greatest blessing.“幽默是人类得到最好的恩赐。)

Vincent Van Gogh -“I twitter my painting, and then I paint my twitter.”
文森特梵高——“我围脖我的画,然后我画我的微博。”
(原文:”I dream of painting and then I paint my dream.”我梦见我的画,然后我画我的梦。)

Rene Descartes -“I tweet, therefore I am”
哲学家笛卡尔-“我围脖,故我在。”
(原文:I Think, Therefore I Am 我思故我在。)

Martin Luther King, Jr.—”I have a dream that my four littlechildren will one day live in a nation where theywill not be judged bythe color of their skin, but by the content of their twitter.”
马丁路德金——“我梦想有一天,我的四个孩子将在一个不是以他们的肤色,而是以他们的微博内容来评判他们的国度里生活。”

Barack Obama–”Twitter,we need it!”
总统奥巴马——“我们需要微博。”
(原文:” Change,we need it!”我们需要改革!)
(原文:”I have a dream that my four little children will one day livein a nation where theywill not be judged by the color of their skin,but by the content of their character.”我梦想有一天,我的四个孩子将在一个不是以他们的肤色,而是以他们的品格优劣来评判他们的国度里生活。)

后记:奥巴马和马丁路德金这一条为eyeera原创(当然我们对马丁路德金这个伟人非常的敬畏!),其他参考资料来自http://www.gadgetcage.com。本文中的中文和英文原文都是由eyeera.com整理编译,哈哈,欢迎转载,麻烦您注明一下出处,呵呵,谢谢!【爱心】
Android的官方开发者博客发了一份幻灯片,介绍了一些Android UI设计的小贴士,Roger在这里以看图说话的形式发出来,有兴趣的读者就继续往下翻吧。整个PPT共分5个部分,Part I 翻译的是前两个部分。


作为开发者,为啥我们要关心UI,前面的一堆通通可以忽略掉,直接跳到最后一条。因为好的UI设计可以帮助我们卖出更多拷贝,赚到更多钱^_^

这个PPT 包含5个部分:
1>该做什么,不该做什么
2>设计哲学和考量
3>你必须了解的 UI 框架特性
4>新的UI 设计模式
5>图标和准则


Don’t:
1>不要照搬你在其它平台的UI设计,应该让用户感觉是在真正使用一个 Android 软件,在你的商标显示和平台整体观感之间做好平衡
2>不要过度使用模态对话框
3>不要使用固定的绝对定位的布局
4>不要使用px单位,使用dp或者为文本使用sp
5> 不要使用太小的字体


Do:
1> 为高分辨率的屏幕创建资源(缩小总比放大好)
2> 需要点击的元素要够大
3> 图标设计遵循 Android 的准则
4> 使用适当的间距(margins, padding)
5> 支持D-pad和trackball导航
6> 正确管理活动(activity)堆栈
7> 正确处理屏幕方向变化
8> 使用主题/样式,尺寸和颜色资源来减少多余的值
9>和视觉交互设计师合作!!!


设计哲学:
1> 干净而不过于简单
2> 关注内容而非修饰
3> 保存一致,让用户容易投入其中,可附加少许变化
4> 使用云端服务(存储和同步用户资料)来加强用户体验

优秀界面的设计准则:
1> 关注用户
2> 显示正确的内容
3> 给予用户适当的回馈
4> 有章可循的行为模式
5> 容忍错误

关注用户:
1> 了解你的用户(年龄,技能,文化,对你的应用的需求,使用的设备,何时何地如何使用设备)
2> ‘用户优先’的设计心态 (用户通常是任务导向的行为模式)
3> 更早,更频繁的由真实用户来测试

显示正确的内容:
1> 最常用的操作需要最快被用户看到并且可用
2> 不太常用的功能可以放到菜单里面

给予用户适当的回馈:
1> 交互式的UI元素最少需要反映出4种不同的状态 (default,disabled,focused,pressed)
2> 保证操作的结果是清晰可见的
3> 多给予用户进度提示,但是不要干扰他们当前的操作


有章可循的行为模式:
1> 行为模式遵循用户的期望(正确的操作活动堆栈,显示用户期望看到的信息和动作)
2> 使用合适的方式来加强功能可见性(可点击的元素就应该看起来是可以点击的)
3> 如果用户完成一项任务需要复杂的操作,重新思考你的设计!!!

容忍错误:
1> 只允许有意义的操作(适当禁用一些按钮)
2> 尽量减少不可回退的操作
3> 允许回退(undo)比使用确定对话框更好(实际上,应该尽量少用确定对话框,它对用户是一种干扰)

如果错误是可能发生的,那它就一定会发生。

设计考量:
1>屏幕的物理尺寸
2>屏幕密度
3> 屏幕的方向(竖向和横向)
4>主要的UI交互方式(触屏还是使用D-pad/trackball)
5>软键盘还是物理键盘
6>了解不同设备之间的相异之处是非常重要的!
7>阅读CDD,学习设备可能差异的地方
8>了解屏幕尺寸和密度分类
