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

          主站蜘蛛池模板: 从江县| 神农架林区| 张家川| 黄浦区| 文化| 龙里县| 文昌市| 巧家县| 平原县| 平阳县| 华坪县| 珲春市| 周至县| 伊金霍洛旗| 那坡县| 车致| 富平县| 轮台县| 淮安市| 上饶县| 三亚市| 青神县| 湄潭县| 林芝县| 舟曲县| 西贡区| 松阳县| 甘孜| 高平市| 元江| 祥云县| 保山市| 蓝山县| 辽中县| 紫阳县| 密山市| 松潘县| 涿州市| 贵定县| 天镇县| 巨野县|