2013年1月12日 星期六

[Android]一個簡單.3gp播放器的製作

不囉唆 程式碼   未來我會加入停止動作 跟進度棒還有音量功能

public class MainActivity extends Activity implements SurfaceHolder.Callback {
主程式除了繼承Activity之外 還必須實作SurfaceHolder.Callback這個interface 實作interface下面就得@Override來實作SurfaceHolder.Callback裡面各個方法的細節 下面還會有程式碼範例


        private ImageView home,back,play;
private MediaPlayer mp = new MediaPlayer();
//宣告surfaceview跟holder
private SurfaceView sfv;
private SurfaceHolder sfh;
        private String playpath="/sdcard/123.3gp";


protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//設定系統PixelFormat為未知
getWindow().setFormat(PixelFormat.UNKNOWN);
//SurfaceView的layout物件宣告
sfv = (SurfaceView)this.findViewById(R.id.sfv);
//設定surfaceholder為Layout surfaceview全螢幕
sfh = sfv.getHolder();
sfh.addCallback(this);

//原影片的size為176x144
sfh.setFixedSize(176,144);
sfh.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
                //設定play按鍵並設定成可按
                play = (ImageView)this.findViewById(R.id.play);
play.setClickable(true);



//按下play呼叫事件
play.setOnClickListener(new OnClickListener(){
public void onClick(View view){
                             
                        //呼叫playvideo方法,底下會宣告方法並將playpath播放路徑傳入方法中
playvideo(playpath);



//底下為playvideo方法實作


private void playvideo(String playpath){
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
//設定影片用sfh播放
mp.setDisplay(sfh);
try {
mp.setDataSource(playpath);
mp.prepare();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
mp.start();
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
}});

}

這次是照個書上實作,算是蠻順利的
不過沒有碰撞跟卡卡 很多原理可能不通 結果就出來了 這樣也是不太好的(我真是犯賤阿...)
之後會加入播放棒 還有暫停播放 跟音量  當然希望能夠更進一步了解 如何支援播放其他格式的影片檔














沒有留言:

張貼留言