java制作仿微信視頻播放控件
更新時間:2015年04月01日 10:37:25 投稿:hebedich
這篇文章主要介紹了java制作仿微信視頻播放控件的方法和代碼分享,控件繼承自SurfaceView,十分的實(shí)用,小伙伴們可以自由擴(kuò)展。
此控件繼承自 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加入回調(diào)接口 mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);// setType必須設(shè)置,要不出錯. } /** * 播放視頻 * @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; } }; /** * 播放成功回調(diào) *@author liuyinjun * @date 2015-2-9 */ public interface OnPlayCompletionListener{ public void onPlayCompletion(); } }
以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。
相關(guān)文章
詳解spring security之httpSecurity使用示例
這篇文章主要介紹了詳解spring security之httpSecurity使用示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08解決springboot的aop切面不起作用問題(失效的排查)
這篇文章主要介紹了解決springboot的aop切面不起作用問題(失效的排查),具有很好的參考價值,希望對大家有所幫助。 一起跟隨小編過來看看吧2020-04-04Java SSH 秘鑰連接mysql數(shù)據(jù)庫的方法
這篇文章主要介紹了Java SSH 秘鑰連接mysql數(shù)據(jù)庫的方法,包括引入依賴的代碼和出現(xiàn)異常報錯問題,需要的朋友可以參考下2021-06-06Java面試??贾瓹oncurrentHashMap多線程擴(kuò)容機(jī)制詳解
幾乎所有的后端技術(shù)面試官都要在?ConcurrentHashMap?技術(shù)的使用和原理方面對小伙伴們進(jìn)行刁難,本文主要來和大家聊聊ConcurrentHashMap多線程的擴(kuò)容機(jī)制,希望對大家有所幫助2023-05-05