技术开发 频道

J2ME API 移植到OPhone经验谈

  下面我们一步一步实现J2ME API在OPHONE OS上的移植。

  1、 入口程序MIDlet

  学过J2ME的开发人员都知道J2ME有一个主体类MIDlet类,它是程序管理接口,调用startApp(),进入应用程序。

  同样,在OPHONE OS平台中同样有一个主体类Activity,调用onCreate(savedInstanceState)进入某个交互界面。

  下面我们将通过继承Activity模拟实现J2ME中的MIDlet类和方法。

public abstract  class MIDlet extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
startApp();
}
public abstract void destroyApp(boolean unconditional);
public String getAppProperty(String key) {
return
null;
}

public abstract void startApp();
public void notifyDestroyed() {
}
public void notifyPaused() {
}
public void pauseApp() {
}
public void platformRequest(String URL) {
}
public void resumeRequest() {
}
}

   2、Canvas

  同样在J2ME中画板Canvas类与OPhone OS中的View类相似。

public abstract class Canvas extends Displayable {

public Canvas(MIDlet context) {
super(context);
}
Graphics g
= new Graphics();
public void onDraw(android.graphics.Canvas canvas) {
g.bind(canvas);
paint(g);
}
int getGameAction(int keyCode) {
return
0;
}
int getKeyCode(int gameAction) {
return
0;
}
String getKeyName(int keyCode) {
return
"key";
}
boolean hasPointerEvents() {
return
true;
}
boolean hasPointerMotionEvents() {
return
true;
}
boolean hasRepeatEvents() {
return
true;
}
protected void hideNotify() {
}
boolean isDoubleBuffered() {
return
true;
}
protected void keyPressed(
int keyCode) {
}
protected void keyReleased(
int keyCode) {
}
protected void keyRepeated(
int keyCode) {
}
protected abstract void paint(Graphics g);
protected void pointerDragged(
int x, int y) {
}
protected void pointerPressed(
int x, int y) {
}
protected void pointerReleased(
int x, int y) {
}
void repaint() {
}
void repaint(
int x, int y, int width, int height) {
}
void serviceRepaints() {
}
void setFullScreenMode(
boolean mode) {
}
protected void showNotify() {
}
protected void sizeChanged(
int w, int h) {
}
}

   3、Graphics

  J2ME 中的Graphics类和OPhone OS中的paint类相似。在移植中,要用OPhone OS类库实现J2ME中的Graphics类,我们在实现的过程中可以对Graphics对象进行修饰,通过整合OPHONE OS 中Canvas并调类库中的Paint类和Color类的方法来实现。比如:

Graphics
public class Graphics {
public final static int VCENTER = 0;
public final static int TOP = 1;
public final static int SOLID = 2;
public final static int RIGHT = 3;
public final static int LEFT = 4;
public final static int HCENTER = 5;
public final static int DOTTED = 6;
public final static int BOTTOM = 7;
public final static int BASELINE = 8;
Canvas dist;
private final Paint paint = new Paint();

public void bind(Canvas canvas) {
dist
= canvas;
}

public void setColor(int eraseColour) {

}

public void drawImage(Image img, int x, int y, int anchor) {
dist.drawBitmap(img.getTp(), x, y, paint);
}
}}

   上面是我们重新定义的Graphics类,在其方法的实现上,我们调用了OPHONE OS的一些具体实现方法,从而用OPHONE OS类库实现了J2ME的框架,做到了两个平台之间很好的移植。

  从上面几个例子可以看出两个平台的框架具有很多相似性,这就为两个平台之间的移植创造了条件。同时我们也会看到,两个平台之间存在一定的差异性,一些在 J2ME中的类和方法无法通过直接继承或者调用OPhone OS来实现,这时候就需要移植人员,自己来实现一些相关的类,这也是移植过程中需要我们去努力克服的困难。相关教程参考http://www.oms-sdn.com/?id=logo网站

0
相关文章