精通Android开发之界面速成 有米分享_第1页
精通Android开发之界面速成 有米分享_第2页
精通Android开发之界面速成 有米分享_第3页
精通Android开发之界面速成 有米分享_第4页
精通Android开发之界面速成 有米分享_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精通Android开发之界面速成试阅:全部同步完毕后,进入到Android目录下,使用make命令编译,你会发现出现如下错误提示: host C: libneo_cgi = external/clearsilver/cgi/cgi.c external/clearsilver/cgi/cgi.c:22:18: error: zlib.h: No such file or directory 这个错误是因为我们缺少zlib1g-dev,需要使用apt-get命令从软件仓库中安装正文:笔者最近需要移植一个J2ME的项目到Android平台上,所以抽空研究了一下Android平台的接口规范。 And

2、roid平台除了在一些接口上采用了和J2ME不一样的名称之外,基本的接口内容还是一样的,那么移植J2ME到Android平台最方便的方法就是利用Android平台的接口重写J2ME的接口,本着这个思路笔者写了一个Wrap包,利用这个Wrap包,基本上J2ME程序不用修改,只需要重新导入一下 重写后的Graphics、Image等类,就可以无缝的运行在Android平台上,所以笔者题目中所说的“两个小时精通Android”的前提是先精通J2ME。 既然要重写J2ME下的这些接口,那么就要先了解Android和J2ME平台到底有哪些不同,然后重写这部 分不同的接口即可。 Font类Android平

3、台里不再提供J2ME下面的Font类,而是以Typeface代替,这为读者提供了更多的选择空间,因为Typeface是可以自定义的,但是为了无缝移植J2ME程序到Android平台上,笔者封装了以个类似于J2ME平台下的Font类,如下: import android.graphics.Typeface; public class Font public static final int STYLE_PLAIN = 0; public static final int STYLE_BOLD = 1; public static final int STYLE_ITALIC = 2; publi

4、c static final int STYLE_UNDERLINED = 4; public static final int SIZE_SMALL = 22; public static final int SIZE_MEDIUM = 31; public static final int SIZE_LARGE = 40; public static final int FACE_SYSTEM = 0; private int face; private int style; private int size; private int baseline; private int width

5、; private int height; public void setWidth(int width) this.width = size; public void setHeight(int height) this.height = height; public int getWidth() return size; public int getHeight() return height; private Typeface iTypeface = Typeface.DEFAULT; public Typeface getTypeface() return iTypeface; pub

6、lic void setSize(int fontSize) size = fontSize; public int getSize() return size; private static final Font DEFAULT_FONT = new Font(null,22); public Font(Typeface aTypeface,int aSize) if(iTypeface != null) iTypeface = aTypeface; size = aSize; public static Font getFont(int fontSepcifier) switch(font

7、Sepcifier) case SIZE_SMALL: return new Font(null,22); case SIZE_MEDIUM: return new Font(null,31); case SIZE_LARGE: return new Font(null,40); return DEFAULT_FONT; public static Font getDefaultFont() return DEFAULT_FONT; public static Font getFont(int face,int style,int size) switch(style) case STYLE_

8、PLAIN: return new Font(Typeface.defaultFromStyle(Typeface.NORMAL),size); case STYLE_BOLD: return new Font(Typeface.defaultFromStyle(Typeface.BOLD),size); case STYLE_ITALIC: return new Font(Typeface.defaultFromStyle(Typeface.ITALIC),size); return DEFAULT_FONT; public int charWidth(char arg) return si

9、ze; public int stringWidth(String arg) return size*(arg.length(); Graphics类Android平台下不再提供Graphics类进行“视图上下文”的控制,而是以Canvas、Paint联合进行控制,笔者封装的Graphics类如下: import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Rec

10、t;import android.graphics.RectF;import android.graphics.Paint.Align;import android.graphics.Paint.FontMetrics;import android.graphics.Paint.Style; public class Graphics public static final int HCENTER = 1; public static final int VCENTER = 2; public static final int LEFT = 4; public static final int

11、 RIGHT = 8; public static final int TOP = 16; public static final int BOTTOM = 32; public static final int BASELINE = 64; public static final int SOLID = 0; public static final int DOTTED = 1; private Bitmap bitmap; private Canvas canvas; private Paint paint; private Rect clip; private Font font; pu

12、blic Graphics(Bitmap bitmap) this.bitmap = bitmap; this.canvas = new Canvas(bitmap); this.canvas.clipRect(0, 0, bitmap.getWidth(), bitmap.getHeight(); this.canvas.save(Canvas.CLIP_SAVE_FLAG); this.paint = new Paint(); this.clip = canvas.getClipBounds(); public void setAlign(int align) if(LEFT = alig

13、n |(Graphics.LEFT | Graphics.TOP) = align |(Graphics.LEFT | Graphics.BOTTOM) = align) paint.setTextAlign(Align.LEFT); else if(HCENTER = align |(Graphics.HCENTER|Graphics.TOP) = align) paint.setTextAlign(Align.CENTER); else if(RIGHT = align |(Graphics.RIGHT | Graphics.TOP) = align) paint.setTextAlign

14、(Align.RIGHT); public void fillRoundRect(int x,int y,int width,int height,int arcWidth,int arcHeight) paint.setStyle(Style.FILL); canvas.drawRoundRect(new RectF(x,y,x+width,y+height), arcWidth, arcHeight, paint); public void drawRoundRect(int x,int y,int width,int height,int arcWidth,int arcHeight)

15、paint.setStyle(Style.STROKE); canvas.drawRoundRect(new RectF(x,y,x+width,y+height), arcWidth, arcHeight, paint); public void fillTriangle(int x1,int y1,int x2,int y2,int x3,int y3) paint.setStyle(Style.FILL); canvas.drawLine(x1, y1, x2, y2, paint); canvas.drawLine(x2, y2, x3, y3, paint); canvas.draw

16、Line(x3, y3, x1, y1, paint); public void setFont(Font font) paint.setTypeface(font.getTypeface(); paint.setTextSize(font.getSize(); FontMetrics fontMetrics = paint.getFontMetrics(); float height = fontMetrics.bottom-fontMetrics.top; font.setHeight(int)height); public void fillArc(int x,int y,int wid

17、th,int height,int startAngle,int arcAngle) paint.setStyle(Style.FILL); canvas.drawArc(new RectF(x,y,width,height), startAngle, arcAngle, true, paint); public void drawArc(int x,int y,int width,int height,int startAngle,int arcAngle) paint.setStyle(Style.STROKE); canvas.drawArc(new RectF(x,y,width,he

18、ight), startAngle, arcAngle, true, paint); public Font getFont() return font; public void setAntiAlias(boolean flag) paint.setAntiAlias(flag); public void setAlphaValue(int alpha) paint.setAlpha(alpha); public void setAlpha(float alpha) setAlphaValue(int) (255 * alpha); public void translate(int x,i

19、nt y) canvas.translate(x,y); public void setColor(int rgb) paint.setColor(rgb); public void setColor(int r,int g,int b) int argb = (0xff)+(r16)+(g x2) x1+; else x2+; if (y1 y2) y1+; else y2+; canvas.drawLine(x1, y1, x2, y2, paint); public void drawRect(int x, int y, int width, int height) paint.setS

20、tyle(Paint.Style.STROKE); canvas.drawRect(x, y, x + width, y + height, paint); public void drawString(String str, int x, int y) canvas.drawText(str, x, y, paint); public void drawString(String str, int x, int y,int align) setAlign(align); canvas.drawText(str, x, y, paint); public void drawClear() pa

21、int.setColor(Color.BLACK); canvas.drawColor(Color.BLACK); public void fillRect(int x, int y, int width, int height) paint.setStyle(Paint.Style.FILL); canvas.drawRect(x, y, x + width, y + height, paint); public int getClipHeight() return clip.bottom - clip.top; public int getClipWidth() return clip.r

22、ight - clip.left; public int getClipX() return clip.left; public int getClipY() return clip.top; public int getColor() return paint.getColor(); public void dispose() paint = null; canvas = null; public void clearRect(int x, int y, int width, int height) canvas.clipRect(x, y, x + width, y + height);

23、canvas.drawARGB(0xff, 0xff, 0xff, 0xff); public void copyArea(int x, int y, int width, int height, int dx, int dy) if (x 0) width += x; x = 0; if (y bitmap.getWidth() width = bitmap.getWidth() - x; if (y + height bitmap.getHeight() height = bitmap.getHeight() - y; Bitmap copy = Bitmap.createBitmap(b

24、itmap, x, y, width, height); canvas.drawBitmap(copy, x + dx, y + dy, null); public void clipRect(int x, int y, int width, int height) canvas.clipRect(x, y, x + width, y + height); clip = canvas.getClipBounds(); public void setClip(int x, int y, int width, int height) if (x = clip.left & x + width =

25、clip.right & y = clip.top & y + height = clip.bottom) return; if (x clip.right | y clip.bottom) canvas.restore(); canvas.save(Canvas.CLIP_SAVE_FLAG); clip.left = x; clip.top = y; clip.right = x + width; clip.bottom = y + height; canvas.clipRect(clip); public void drawOval(int x, int y, int width, in

26、t height) paint.setStyle(Paint.Style.STROKE); canvas.drawOval(new RectF(x, y, x + width, y + height), paint); public void drawPolygon(int xpoints, int ypoints, int npoints) canvas.drawLine(xpointsnpoints - 1, ypointsnpoints - 1, xpoints0, ypoints0, paint); for (int i = 0; i npoints - 1; i+) canvas.d

27、rawLine(xpointsi, ypointsi, xpointsi + 1, ypointsi + 1, paint); public Canvas getGraphics() return canvas; public Paint getPaint() return paint; public Rect getClip() return clip; public Bitmap getBitmap() return bitmap; Connector类Android平台下不再提供这个静态接口类,而是提供HttpURLConnection以及URL进行网络通讯,这个类的封装如下: pack

28、age org.loon.framework.android.game; import .HttpURLConnection;import .URL; public class Connector public static final int READ = 1; public static final int WRITE = 2; public static final int READ_WRITE = 3; private static String platform; private static boolean j2me; public static H

29、ttpConnection open(String name,int mode,boolean timeouts) throws java.io.IOException URL url = new URL(name); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); / Allow Inputs conn.setDoInput(true); / Allow Outputs conn.setDoOutput(true); conn.setConnectTimeout(); HttpConnection co =

30、 new HttpConnection(); 精通Android开发之按键映射篇笔者的上篇文章两个小时精通Android开发中讲解了利用Android的接口规范开发J2ME的Wrap包,从而解决了J2ME程序无法运行在Android平台上的技术难题,但是Android平台和J2ME另一个重要的不同点就是按键响应接口,如何让J2ME程序的按键响应可以无缝的移 植到Android上呢?答案也是Wrap包。 笔者这里通过按键映射把Android平台的键盘码转换成J2ME平台的键盘码,或者把Android平台的触摸事件通过代理传递给J2ME中相应的接口。 首先,需要在Android平台的GameCan

31、vas里进行如下定义: public class GameCanvas extends Screen public static final int UP = 1; public static final int DOWN = 6; public static final int LEFT = 2; public static final int RIGHT = 5; public static final int FIRE = 8; public static final int GAME_A = 9; public static final int GAME_B = 10; public

32、static final int GAME_C = 11; public static final int GAME_D = 12; public static final int KEY_NUM0 = 48; public static final int KEY_NUM1 = 49; public static final int KEY_NUM2 = 50; public static final int KEY_NUM3 = 51; public static final int KEY_NUM4 = 52; public static final int KEY_NUM5 = 53;

33、 public static final int KEY_NUM6 = 54; public static final int KEY_NUM7 = 55; public static final int KEY_NUM8 = 56; public static final int KEY_NUM9 = 57; public static final int KEY_STAR = 42; public static final int KEY_POUND = 35; 当然,为了适配J2ME里的接口笔者还定义如下的接口: protected abstract void keyRepeated(i

34、nt keyCode); protected abstract void keyPressed(int keyCode); protected abstract void keyReleased(int keyCode); protected abstract void pointerPressed(int x, int y); protected abstract void pointerReleased(int x, int y) protected abstract void pointerDragged(int x, int y); 笔者在上面定义的都是J2ME的视图类Canvas里的

35、按键响应接口,这里需要做的工作就是把Android里的按键进行映射转换成J2ME里的标准键值后传递给这些接口,并由继承自GameCanvas的界面类进行实现,完全和J2ME里一样了,基本不用修改任何代码。 键值映射的代码如下: public int keyActual = 0; public int keyAction = 0; public void keyPreparse(int keyCode,KeyEvent e) if(keyCode = KeyEvent.KEYCODE_0) keyActual = GameCanvas.KEY_NUM0; else if(keyCode = Ke

36、yEvent.KEYCODE_1) keyActual = GameCanvas.KEY_NUM1; else if(keyCode = KeyEvent.KEYCODE_2) keyActual = GameCanvas.KEY_NUM2; else if(keyCode = KeyEvent.KEYCODE_3) keyActual = GameCanvas.KEY_NUM3; else if(keyCode = KeyEvent.KEYCODE_4) keyActual = GameCanvas.KEY_NUM4; else if(keyCode = KeyEvent.KEYCODE_5

37、) keyActual = GameCanvas.KEY_NUM5; else if(keyCode = KeyEvent.KEYCODE_6) keyActual = GameCanvas.KEY_NUM6; else if(keyCode = KeyEvent.KEYCODE_7) keyActual = GameCanvas.KEY_NUM7; else if(keyCode = KeyEvent.KEYCODE_8) keyActual = GameCanvas.KEY_NUM8; else if(keyCode = KeyEvent.KEYCODE_9) keyActual = GameCanvas.KEY_NUM9; else if(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论