任何動畫的最基本的前提,是要在足夠快的時間內顯示和更換一張張的圖片,讓人的眼睛看到動的畫面效果.圖片必須按照順序畫出來.從一張圖片到下一張圖片之間的變化越小,效果會越好.
要做的,是使用你的圖片處理軟體(比如ps或者firework)創建一系列相同大小的圖片來組成動畫.每張圖片代表動畫一幀.
你需要製作一定數量的禎--越多的幀會讓你的動畫看上去越平滑.製作好的圖片一定要保存成PNG(Portable Network Graphics) 格式,MIDP唯一支持的圖片格式;(有兩個辦法讓你剛做好的圖片在MIDlet上變成動畫.第一,把圖片都放到一個web伺服器上,讓MIDlet下載他們,MIDP內置的HTTP支持.第二個辦法更簡單,把圖片用MIDlet打包成jar文件.如果你使用的是J2ME開發工具,把PNG文件放在你的項目文件裡面就可以了.
動畫的過程其實更像帳本記錄:顯示當前幀,然後適當地更換到下一幀.那麼使用一個類來完成這個工作應該是很恰當的,那好,我們就先定義一個AnimatedImage類:
你也可以傳遞一個Canvas對象(可選),和一個剪輯列表(clip list).如果你指定了一個canvas和使用一個timer來自動更換到動畫的下一幀,就如下面的例子代碼中一樣,canvas在動畫向前滾動以後自動被重畫(repaint).不過這樣的實現辦法是可選的,你可以這樣做,也可以讓程序選擇合適的時候重畫canvas.
MIDP 1.0不支持透明的圖片,AnimatedImage 類使用一個剪輯列表來模擬透明的效果,剪輯列表是圖片被剪成的方塊區域的系列.圖片被畫出來的時候分開幾次,每次畫一個剪輯列表裡面的剪輯區域.剪輯列表在幀的基礎上被定義好,
你需要為圖片的每一幀創建一個數組.數組的大小應該是4的倍數,
每一個剪輯面積保持了四個數值:左坐標,頂坐標,寬度以及高度.坐標的原點是整個圖片的左上角.需要注意的是使用了剪輯列表會使動畫慢下來.如果圖片更加複雜的話,你應該使用矢量圖片.
AnimatedImage類擴展了java.util.TimerTask,允許你設定一個timer.這裡有個例子說明如何使用timer做動畫:
每隔大約200毫秒,timer調用AnimatedImage.run()方法一次,這個方法是的動畫翻滾到下一個幀.現在我們需要的是讓MIDlet 來試試顯示動畫!我們定義一個簡單的Canvas類的子類,好讓我們把動畫「粘貼上去」.
七幀圖片的動畫,你可以看到一個拍著翅膀的小鳥.MIDlet顯示了5隻小鳥,小鳥的位置和刷新速度是隨機的.你可以用一些其他的辦法來改進這個程序,但這個程序也應該足夠能讓你上手了.
[火星人 ] 用J2ME在移動設備上實現動畫已經有656次圍觀