Blogger Scott

          J2ME與Android系統(tǒng)的常用類、方法對比

          J2ME與Android系統(tǒng)的常用類、方法對比

           

          J2MEAndroid系統(tǒng)的常用類、方法對比

           

          J2ME系統(tǒng)

          Android系統(tǒng)

          入口程序

          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(),活動(dòng)狀態(tài),啟動(dòng)時(shí)調(diào)用,初始化。

          onCreate(),返回時(shí)也會(huì)調(diào)用此方法。

          onCreate()后調(diào)用onStart()

          onStart()后調(diào)用onResume()

          生命周期-暫停

          PauseApp(),暫停狀態(tài),如來電時(shí),調(diào)用該接口。

          onPause()

          生命周期-銷毀

          destroyApp(),銷毀狀態(tài),退出時(shí)調(diào)用。

          onStop(),程序不可見時(shí)調(diào)用onDestroy(),程序銷毀時(shí)調(diào)用

          刷新

          高級UI組件由內(nèi)部刷新實(shí)現(xiàn)。

          低級UI,canvas中通過調(diào)用線程結(jié)合repaint()來刷新,讓線程不斷循環(huán)

          高級UIHandler類通過消息的機(jī)制刷新

          onDraw()刷新接口

          低級UI開發(fā)者用線程控制更新,在lockCanvas()unlockCanvasAndPost()方法之間繪制

          數(shù)據(jù)存儲(chǔ)

          Record Management System (RMS)

          SQLite數(shù)據(jù)庫

          SharedPreferences

          可繪區(qū)域

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

          游戲開發(fā)包

          javax.microedition.lcdui.game

          GameCanvas

          Layer

          LayerManager

          Sprite

          TiledLayer

          無專門針對游戲的開發(fā)包,可以直接拿來主義,將J2ME的開發(fā)包稍作修改

          音效

          Player s =Manager.createPlayer(InputStream);

          s.prepare(); //創(chuàng)建

          s.start();//播放

          s.stop();//暫停

          s.stop();//關(guān)閉

          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中對應(yīng)的J2ME相關(guān)的替代類和替代方法后,開始噼里啪啦的改代碼了。沒過多久,首個(gè)俄羅斯方塊算是移植成功。當(dāng)他開始移植下一款游戲時(shí),發(fā)現(xiàn)又要重復(fù)的改那些代碼……

                 “可不可以減少代碼的改動(dòng)呢?”小白問自己。“可否用Android的相關(guān)代碼構(gòu)造一些和J2me里功能類似的代碼呢?”

           

                 原則:盡量少改動(dòng)J2ME項(xiàng)目的代碼。用Android中對應(yīng)的類改寫成J2ME中的方法和類,減少以后移植的工作量,甚至實(shí)現(xiàn)無縫移植。

           

                 “或許我可以構(gòu)造一個(gè)名為MIDlet實(shí)為Activity的類,這樣J2me中的入口類就不用改動(dòng)了”

          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類相當(dāng)于Android體系中的SurfaceView類,都是負(fù)責(zé)繪制顯示界面的,游戲的大循環(huán)一半也在這兩個(gè)類里實(shí)現(xiàn),也就是都會(huì)實(shí)現(xiàn)Runnable類,更新邏輯和更新界面都在此類的大循環(huán)中處理。

           

          Graphics類在J2me里負(fù)責(zé)繪圖和排版樣式等。

          我們可以用Android里的Canvas類和Paint類共同組合一個(gè)Android里的Graphics類,如Graphics類的構(gòu)造函數(shù)可這樣定義:

          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里可以設(shè)置居中方式,在Android體系里我們用Paint類來實(shí)現(xiàn)相同的效果,例如:

          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體系的代碼完成方法體,達(dá)到無縫移植。以繪制、填充矩形為例:

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

          posted on 2011-11-07 21:37 江天部落格 閱讀(885) 評論(0)  編輯  收藏 所屬分類: Android

          主站蜘蛛池模板: 中方县| 文化| 于田县| 平湖市| 阿城市| 连山| 油尖旺区| 循化| 筠连县| 原阳县| 新龙县| 都安| 门头沟区| 九江市| 琼海市| 长春市| 高州市| 丹棱县| 海淀区| 临沭县| 冷水江市| 五指山市| 城口县| 赣州市| 临安市| 泉州市| 健康| 千阳县| 周口市| 洞头县| 北川| 睢宁县| 蒲江县| 滦南县| 泸溪县| 尼木县| 新乐市| 淮滨县| 江安县| 嘉黎县| 定日县|