MMAPI是在JSR 135中提出的,加強了Java ME平台對多媒體編程的支撐。例如播放音頻和視頻文件,捕捉聲音和圖像等。目前大多數支撐JTWI 1.0的手機都支撐了MMAPI。本文先容如何應用MMAPI播放gif格局的動畫。
實在制作動畫後果可以有許多措施,例如准備一個圖片數組,在程序中不斷的切換顯示不同的圖片,只要時間的間隔設置公平即可呈現動畫的後果。假如應用MMAPI則可以直接播放gif的動畫。實在這和播放視頻文件的方法和流程是類似的。
首先我們應當准備一個gif文件,放在能夠拜訪到的地位,且確保這個文件會被打包進jar內。在創立播放器之前應當先確認手機上的MMAPI實現是否支撐image/gif格局的播放,假如支撐則創立Player,如下。
private void createPlayer(InputStream is) { String[] contents = Manager.getSupportedContentTypes(null); for (int i = 0; i < contents.length; i++) { if (contents[i].toLowerCase().indexOf("image/gif") != -1) { try { player = Manager.createPlayer(is, "image/gif"); player.realize(); } catch (IOException ex) { ex.printStackTrace(); } catch (MediaException ex) { ex.printStackTrace(); } } }}Player創立後,我們需要獲得VideoControl,然後將內容渲染到屏幕上,VideoControl供給了兩種模式,這裡我們應用USE_GUI_PRIMITIVE方法,將返回的Item追加到一個Form中顯示。最後調用Player.start()即可播放。留心在退出之前必定要開釋Player資源,封閉Player並設置為null。GifPlayer的源碼如下:
源程序如下
/* * GifPlayer.Java * * Created on 2006年6月21日, 下午7:28 */ package com.J2MEdev.gif; import Java.io.IOException;import Java.io.InputStream;import Javax.microedition.lcdui.Display;import Javax.microedition.lcdui.Form;import Javax.microedition.lcdui.Item;import Javax.microedition.media.Manager;import Javax.microedition.media.MediaException;import Javax.microedition.media.Player;import Javax.microedition.media.control.VideoControl;import Javax.microedition.midlet.*; /** * * @author ming * @version */public class GifPlayer extends MIDlet { private Display display = null; private Player player = null; public void startApp() { if (display == null) { display = Display.getDisplay(this); } Form form = new Form( "gif player"); InputStream is = getClass().getResourceAsStream("/a.gif"); createPlayer(is); if (player == null) { form.append("can not play image/gif"); } else { VideoControl vc = (VideoControl) player.getControl("VideoControl"); if (vc != null) { form.append((Item) vc.initDisplayMode(VideoControl. USE_GUI_PRIMITIVE, null)); } } display.setCurrent(form); try { player.start(); } catch (MediaException ex) { ex.printStackTrace(); } } private void createPlayer(InputStream is) { String[] contents = Manager.getSupportedContentTypes(null); for (int i = 0; i < contents.length; i++) { if (contents[i].toLowerCase().indexOf("image/gif") != -1) { try { player = Manager.createPlayer(is, "image/gif"); player.realize(); } catch (IOException ex) { ex.printStackTrace(); } catch (MediaException ex) { ex.printStackTrace(); } } } } public void pauseApp() { } public void destroyApp(boolean unconditional) { if (player != null) { player.close(); player = null; } }}