java製作仿微信視頻播放控制項_java

來源:互聯網
上載者:User

此控制項繼承自 SurfaceView,利用 MediaPlayer 播放視頻。

小視頻播放介面

MoviePlayerView.java

import java.io.IOException;import android.content.Context;import android.media.AudioManager;import android.media.MediaPlayer;import android.media.MediaPlayer.OnCompletionListener;import android.util.AttributeSet;import android.view.SurfaceHolder;import android.view.SurfaceHolder.Callback;import android.view.SurfaceView; /** * 視頻播放控制項*@author liuyinjun * @date 2015-2-8 */public class MoviePlayerView extends SurfaceView {   private SurfaceHolder mSurfaceHolder;  private MediaPlayer mPlayer;     public MoviePlayerView(Context context) {    this(context, null);  }     public MoviePlayerView(Context context, AttributeSet attrs) {    this(context, attrs, 0);  }     public MoviePlayerView(Context context, AttributeSet attrs, int defStyle) {    super(context, attrs, defStyle);         mSurfaceHolder = this.getHolder();    mSurfaceHolder.addCallback(mSurfaceHolderCallback); // holder加入回調介面    mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);// setType必須設定,要不出錯.   }     /**   * 播放視頻   * @param fileName 檔案路徑   */  public void play(String fileName, final OnPlayCompletionListener completionListener) {    mPlayer = new MediaPlayer();    mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);    mPlayer.setDisplay(mSurfaceHolder); // 定義一個SurfaceView播放它     mPlayer.setOnCompletionListener(new OnCompletionListener() {       @Override      public void onCompletion(MediaPlayer arg0) {        stop();        if(completionListener != null)          completionListener.onPlayCompletion();        // canvas.drawColor(Color.TRANSPARENT,        // PorterDuff.Mode.CLEAR);      }    });     try {      mPlayer.setDataSource(fileName);      mPlayer.prepare();    } catch (IllegalStateException e) {      // TODO Auto-generated catch block      e.printStackTrace();    } catch (IOException e) {      // TODO Auto-generated catch block      e.printStackTrace();    }    mPlayer.start();  }   private void stop() {    if (mPlayer != null) {      mPlayer.release();      mPlayer = null;    }  }   /**   * 釋放資源   */  public void release() {    if (mPlayer != null) {      mPlayer.release();      mPlayer = null;    }  }     private Callback mSurfaceHolderCallback = new Callback() {     @Override    public void surfaceDestroyed(SurfaceHolder arg0) {      mSurfaceHolder = null;    }     @Override    public void surfaceCreated(SurfaceHolder arg0) {      // TODO Auto-generated method stub      mSurfaceHolder = arg0;    }     @Override    public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2,        int arg3) {      // TODO Auto-generated method stub      mSurfaceHolder = arg0;    }  };     /**   * 播放成功回調  *@author liuyinjun     * @date 2015-2-9   */  public interface OnPlayCompletionListener{    public void onPlayCompletion();  } }

以上所述就是本文的全部內容了,希望大家能夠喜歡。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.