Android播放器自定义,android surfaceView+mediaPlayer 自定义视频播放器
你可以參考我的寫法,注意點就是你自定義的MyCallBack()里面要回調,也就是我寫的SurfaceCallBack()里面的SurfaceCreated()函數要實現你寫的setOnPreparedListener()的監聽
public class Video implements MediaPlayer.OnCompletionListener,MediaPlayer.OnPreparedListener,MediaPlayer.OnErrorListener,MediaPlayer.OnBufferingUpdateListener,VideoClickListener{private?Context?context;
private?SurfaceView?surfaceView;
private?SurfaceHolder?surfaceHolder;
private?MediaPlayer?mediaPlayer;
private?ProgressBar?progressBar;
private?SeekBar?seekBar;
private?VerticalSeekBar?seekBar_sound;
private?ImageView?pause,full_screen,silent;
private?TextView?textView;
private?boolean?seekBarAutoFlag;
private?String?videoTimeString;
//判斷值
private?boolean?isFullScreen=false;??//是否全屏
private?boolean?isPause=false;?//是否暫停
private?boolean?isSilent=false;//是否靜音
private?int?screenWidth;??//獲取到設備的寬高
private?int?screenHeight;
@Override
public?MediaPlayer?getMediaPlayer()?{
return?mediaPlayer;
}
@Override
public?SurfaceView?getSurfaveView()?{
return?surfaceView;
}
@Override
public?Thread?getThread()?{
return?thread;
}
public?Video(Context?context,?MediaPlayer?mediaPlayereekBar,?SurfaceView?surfaceView,?ProgressBar?progressBar,?SeekBar?seekBar,?TextView?textView,?ImageView?pause,?ImageView?full_screen)?{
this.context?=?context;
this.mediaPlayer=mediaPlayereekBar;
this.surfaceView=surfaceView;
this.progressBar=progressBar;
this.seekBar=seekBar;
this.textView=textView;
this.pause=pause;
this.full_screen=full_screen;
init();
}
/**
*?初始化控件
*/
public?void?init(){
//?設置surfaceHolder
surfaceHolder?=?surfaceView.getHolder();
//?設置Holder類型,該類型表示surfaceView自己不管理緩存區,雖然提示過時,但最好還是要設置
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
//?設置surface回調
surfaceHolder.addCallback(new?SurfaceCallback());
//???mAudioManager=?(AudioManager)?context.getSystemService(AUDIO_SERVICE);
//獲取屏幕的寬高
WindowManager?wm?=?(WindowManager)?context
.getSystemService(Context.WINDOW_SERVICE);
screenWidth?=?wm.getDefaultDisplay().getWidth();
screenHeight?=?wm.getDefaultDisplay().getHeight();
}
/**
*?回調?對SurfaceView的生命周期的實現。
*/
private?class?SurfaceCallback?implements?SurfaceHolder.Callback?{
public?void?surfaceChanged(SurfaceHolder?holder,?int?format,?int?width,?int?height)?{
//?SurfaceView的大小改變
mediaPlayer.setDisplay(surfaceHolder);
}
public?void?surfaceCreated(SurfaceHolder?holder)?{
//?surfaceView被創建
//?設置播放資源
playVideo();
}
public?void?surfaceDestroyed(SurfaceHolder?holder)?{
//?surfaceView銷毀
//?如果MediaPlayer沒被銷毀,則銷毀mediaPlayer
if?(null?!=?mediaPlayer)?{
mediaPlayer.release();
mediaPlayer?=?null;
}
}
}
/**
*?播放視頻
*/
public?void?playVideo()?{
//?初始化MediaPlayer
mediaPlayer?=?new?MediaPlayer();
//?重置mediaPaly,建議在初始滑mediaplay立即調用。
mediaPlayer.reset();
//?設置聲音效果
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
//?設置播放完成監聽
mediaPlayer.setOnCompletionListener(Video.this);
//?設置媒體加載完成以后回調函數。
mediaPlayer.setOnPreparedListener(this);
//?錯誤監聽回調函數
mediaPlayer.setOnErrorListener(this);
//?設置緩存變化監聽
mediaPlayer.setOnBufferingUpdateListener(this);
File?file?=?new?File(Environment.getExternalStorageDirectory(),?"震撼宇宙10秒倒計時.mp4");
String?a=file.getPath();
Uri?uri?=?Uri
.parse("http://video.eastday.com/a/180320180216447158758.html?qid=01360");
try?{
//?mediaPlayer.reset();
//mediaPlayer.setDataSource(media.this,?uri);
mediaPlayer.setDataSource(a);
//?設置異步加載視頻,包括兩種方式?prepare()同步,prepareAsync()異步
mediaPlayer.prepareAsync();
}?catch?(IOException?e)?{
e.printStackTrace();
}
}
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Android播放器自定义,android surfaceView+mediaPlayer 自定义视频播放器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android自定义dialog开源库,
- 下一篇: android动画封装,Android属