




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生宿舍管理服务采购
- 二零二五师范生公费教育协议书样本
- 二零二五版全新夫妻婚内保证协议书
- 安检服务业务合同
- 信用反担保合同书二零二五年
- 瑜伽馆专职老师合同模板二零二五年
- 产品合伙合同样本
- 公会授权合同样本
- 学习宣传道德模范先进事迹活动方案
- 企业出售土地合同样本
- 浙江省杭州市萧山区2022-2023学年第二学期四年级科学期中试题(含答案)
- 2024年黑龙江出版集团招聘笔试真题
- 2025年上半年上海青浦新城发展(集团)限公司自主招聘9名易考易错模拟试题(共500题)试卷后附参考答案
- 小学数学教学中错题资源的有效利用研究论文
- 2025年山西电力职业技术学院单招职业技能考试题库及答案1套
- 2025年高考预测猜题 化学 信息必刷卷02(新高考 通 用)(解析版)
- 3.2依法行使权利 课件 -2024-2025学年统编版道德与法治八年级下册
- 五月菜油香(2024年宁夏中考语文试卷记叙文阅读试题)
- 2025非小细胞肺癌中西医结合诊疗指南
- 妇科围手术期的护理
- 《智能轮椅的结构计算设计与选型案例综述》3000字
评论
0/150
提交评论