<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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 江天部落格 閱讀(883) 評論(0)  編輯  收藏 所屬分類: Android

    主站蜘蛛池模板: 91视频免费网址| 春意影院午夜爽爽爽免费| 久9久9精品免费观看| 一本色道久久综合亚洲精品| 亚洲一区在线免费观看| 亚洲午夜久久久影院| 99免费精品视频| 亚洲无av在线中文字幕| 最好免费观看高清在线 | 亚洲天堂免费在线视频| 亚洲高清无码在线观看| 国产精品美女久久久免费 | 国产成人免费ā片在线观看| 国产精品亚洲专区在线播放| 免费永久国产在线视频| 一级毛片免费播放试看60分钟| 免费在线观看黄网站| 国产大片免费天天看| 亚洲av无码一区二区三区乱子伦| 日本中文字幕免费高清视频| 亚洲精品在线播放| 毛片视频免费观看| 国产亚洲日韩在线a不卡| 亚洲人成图片小说网站| 99re6在线精品视频免费播放| 亚洲av无码一区二区三区天堂古代| 免费视频专区一国产盗摄| 在线观看亚洲AV每日更新无码| 男人的好看免费观看在线视频| 亚洲人成电影网站色| 亚洲国产精品人人做人人爽| 国产午夜精品理论片免费观看| 久久精品国产亚洲网站| av免费不卡国产观看| 爱爱帝国亚洲一区二区三区| 亚洲老妈激情一区二区三区| 免费看成人AA片无码视频羞羞网| 国产精品亚洲а∨天堂2021 | 午夜一区二区免费视频| a毛片在线免费观看| 亚洲性色精品一区二区在线|