Android與J2ME區別之我見(3)

來源:互聯網
上載者:User
這一回該說到Android與J2ME下,作為自訂繪製的UI呈現所必不可少的組成部分——映像。

如果你在J2ME下做過手機遊戲,尤其是那種橫版過關型的,就少不了從資源檔裡產生Image對象,然後用該死的graphics.drawImage(Image,int,int,int)等一系列方法將映像繪製到指定的位置。Android雖然漂亮N多,但是這種事情也不能倖免——它的canvas.drawBitmap(Bitmap,int,int,Paint)就是做這個用的。

乍一看這兩個東西好像又沒什麼區別了,至少在繪製方面又如出一轍。的確如此,但是天下沒有兩片同樣的樹葉,更何況是兩個class。仔細一看,Image與Bitmap的對象,在構造上還是有著很大的區別的。

先來看J2ME,Image類沒有公開的建構函式,但是有一大堆靜態creatImage()方法,這N多種重載能讓你從檔案名稱、資料流、已經構造好的Image對象甚至位元組數組裡建立出Image對象來,建立出來你就能用了,還算挺方便的。但是Android則不然,它那個Bitmap類,若要從資源檔構造,可麻煩得要死,請看代碼:        Resources r = getResources();

        Bitmap board = Bitmap.createBitmap(240, 240, Bitmap.Config.ARGB_8888);
        Canvas c = new Canvas(board);
        Drawable tempBoard = r.getDrawable(R.drawable.board);
        tempBoard.setBounds(0, 0, 240, 240);
        tempBoard.draw(c);

這段代碼是在Activity裡面調用的,Resources只是說明我們的Bitmap是從資源檔裡面構造的,並沒有其他的特別之處。可以看到,Bitmap與Image一樣,也沒有通過建構函式而是通過靜態方法得到了它的執行個體(這一點和Image類是一樣的)。Bitmap.createBitmap(int,int,Bitmap.config)方法只是建立了一個空的Bitmap對象(這個空不是null 指標null,有些類似於Null 字元串"",至少我是這麼理解的),然後通過Canvas類(這是Android的Canvas類,不是J2ME的)的構造方法,將Bitmap對象傳遞進去,再利用Drawable.draw(Canvas)方法把Drawable對象(已經很接近資源檔了)畫到Canvas上,這樣才讓Bitmap與資源檔夾drawable裡的png之類的影像檔套上關係……

這個過程好麻煩哦,說好聽的是Bitmap難以高攀,說不好聽的就是脫了褲子放屁。J2ME一步到位的事情,它做了三步,雖說不怎麼複雜,但是為什麼這麼做估計只有google知道。

執行個體建立好了,也初始化過了,於是能用了,說起來Bitmap在用法上還是很靈活的,能給好多地方使用,而且跟J2ME的Image用法極為相似,這點挺讓人滿意的。

對這兩個類的比較就到這裡了,下一次來比較一下J2ME與Android在響應按鍵輸入以及觸控螢幕事件方面的異同。
謝謝!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.