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

    主站蜘蛛池模板: 黄色免费在线网址| 四虎在线免费视频| 亚洲一区二区电影| 好大好硬好爽免费视频| 一级毛片**免费看试看20分钟| 成年女人午夜毛片免费看| 一级毛片a免费播放王色电影 | 亚洲夜夜欢A∨一区二区三区| 一级毛片免费毛片一级毛片免费| 亚洲一区二区久久| 亚洲性在线看高清h片| www视频免费看| 一级美国片免费看| 亚洲二区在线视频| 中文字幕亚洲综合久久菠萝蜜| 久久www免费人成看片| 一级做性色a爰片久久毛片免费| 亚洲经典在线观看| 国产亚洲精品影视在线产品| 无人在线观看完整免费版视频| 久久国产乱子伦精品免费午夜| 亚洲不卡影院午夜在线观看| 国产亚洲免费的视频看| 日日夜夜精品免费视频| 最近2019年免费中文字幕高清| 九九免费久久这里有精品23| 亚洲91精品麻豆国产系列在线 | 亚洲图片在线观看| 免费中文字幕不卡视频| 日韩精品无码区免费专区| 久久久精品午夜免费不卡| 国产亚洲男人的天堂在线观看| 亚洲日本国产精华液| 亚洲欧洲日产国码无码久久99| 日韩免费视频在线观看| 免费观看国产网址你懂的| 天黑黑影院在线观看视频高清免费| 亚洲日本在线电影| 亚洲天堂一区二区三区| 亚洲爆乳精品无码一区二区三区| 免费大片在线观看网站|