Blogger Scott

J2ME与Android系统的常用类、方法对比

J2ME与Android系统的常用类、方法对比

 

J2MEAndroid系统的常用类、方法对比

 

J2ME系统

Android系统

入口程序

MIDlet

Activity

图片类

Image

Image.createImage(path);

BitMap

BitmapFactory.decodeResource(getResources(),R.drawable.map0);

画笔

Graphics

Canvas

绘画

Displayable

View

按键

keyPressed()

keyRepeated()

keyReleased()

onKeyDown()

onKeyUp()

onTracKballEvent()

触笔

pointerPressed(),

pointerReleased(),

pointerDragged()

onTouchEvent()

打印信息

System.out.printlt()

Log

生命周期-开始

startApp(),活动状态,启动时调用,初始化。

onCreate(),返回时也会调用此方法。

onCreate()后调用onStart()

onStart()后调用onResume()

生命周期-暂停

PauseApp(),暂停状态,如来电时,调用该接口。

onPause()

生命周期-销毁

destroyApp(),销毁状态,退出时调用。

onStop(),程序不可见时调用onDestroy(),程序销毁时调用

刷新

高级UI组件由内部刷新实现。

低级UI,canvas中通过调用线程结合repaint()来刷新,让线程不断循环

高级UIHandler类通过消息的机制刷新

onDraw()刷新接口

低级UI开发者用线程控制更新,在lockCanvas()unlockCanvasAndPost()方法之间绘制

数据存储

Record Management System (RMS)

SQLite数据库

SharedPreferences

可绘区域

int clipX = g.getClipX(); 

int clipY = g.getClipY(); 

int clipW = g.getClipWidth(); 

int clipH = g.getClipHeight(); 

g.clipRect(x, y, width, height); 

g.setClip(clipX, clipY, clipW, clipH);

canvas.save();

canvas.clipRect(x,y,x+width, y+height); 

cavnas.resave();

游戏中清屏

paint.setStyle(Style.FILL);

canvas.drawRect(new Rect(0, 0, getWidth(), getHeight()), paint);

canvas.drawColor(Color.BLACK);

游戏开发包

javax.microedition.lcdui.game

GameCanvas

Layer

LayerManager

Sprite

TiledLayer

无专门针对游戏的开发包,可以直接拿来主义,将J2ME的开发包稍作修改

音效

Player s =Manager.createPlayer(InputStream);

s.prepare(); //创建

s.start();//播放

s.stop();//暂停

s.stop();//关闭

s.release();//释放  

MediaPlayer类处理背景音乐

SoundPool类处理一些简单的音效

全屏

CanvasSetFullScreenMode()

getWindow().setFlags(

WindowManager.LayoutParams.FLAG_FULLSCREEN,

WindowManager.LayoutParams.FLAG_FULLSCREEN);

requestWindowFeature(Window.FEATURE_NO_TITLE);

获得屏幕尺寸

Canvas类的getHeight()getWidth()

Display d = getWindowManager().getDefaultDisplay();

 screenWidth = d.getWidth();

 screenHeight = d.getHeight();

双缓冲

Image bufImage=Image.createImage(bufWidth, bufHeight);

Graphics bufGraphics=bufImage.getGraphics();

Bitmap carBuffer = Bitmap.createBitmap(bufWidth, bufHeight, Bitmap.Config.ARGB_4444); 

Canvas carGp = new Canvas(carBuffer);

 

 

 

 

 

      

   开始移植

 

       小白找到Android中对应的J2ME相关的替代类和替代方法后,开始噼里啪啦的改代码了。没过多久,首个俄罗斯方块算是移植成功。当他开始移植下一款游戏时,发现又要重复的改那些代码……

       “可不可以减少代码的改动呢?”小白问自己。“可否用Android的相关代码构造一些和J2me里功能类似的代码呢?”

 

       原则:尽量少改动J2ME项目的代码。用Android中对应的类改写成J2ME中的方法和类,减少以后移植的工作量,甚至实现无缝移植。

 

       “或许我可以构造一个名为MIDlet实为Activity的类,这样J2me中的入口类就不用改动了”

Activity类改装的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() {} 

 

MIDlet类我们解决了,接下来就是非常重要的Canvas类了

J2me里的Canvas类相当于Android体系中的SurfaceView类,都是负责绘制显示界面的,游戏的大循环一半也在这两个类里实现,也就是都会实现Runnable类,更新逻辑和更新界面都在此类的大循环中处理。

 

Graphics类在J2me里负责绘图和排版样式等。

我们可以用Android里的Canvas类和Paint类共同组合一个Android里的Graphics类,如Graphics类的构造函数可这样定义:

public 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();    

Graphics里可以设置居中方式,在Android体系里我们用Paint类来实现相同的效果,例如:

public void setAlign(int align)    

    {    

        if(LEFT == align    

                ||(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(Align.RIGHT);    

        }    

}   

 

所有的绘制方法也同样沿用J2me中的方法名,用Android体系的代码完成方法体,达到无缝移植。以绘制、填充矩形为例:

public void fillArc(int x,int y,int width,int height, int startAngle,int arcAngle) {

posted on 2011-11-07 21:37 江天部落格 阅读(874) 评论(0)  编辑  收藏 所属分类: Android


只有注册用户登录后才能发表评论。


网站导航: