public class Mvextends SurfaceViewimplements SurfaceHolder.Callback{
int index =0;
public static String[]video = {
"http://vfx.mtime.cn/Video/2019/03/18/mp4/190318214226685784.mp4",
"http://vfx.mtime.cn/Video/2019/03/19/mp4/190319104618910544.mp4",
"http://vfx.mtime.cn/Video/2019/03/19/mp4/190319125415785691.mp4",
"http://vfx.mtime.cn/Video/2019/03/17/mp4/190317150237409904.mp4",
"http://vfx.mtime.cn/Video/2019/03/14/mp4/190314223540373995.mp4",
"http://vfx.mtime.cn/Video/2019/03/14/mp4/190314102306987969.mp4",
"http://vfx.mtime.cn/Video/2019/03/13/mp4/190313094901111138.mp4",
"http://vfx.mtime.cn/Video/2019/03/12/mp4/190312143927981075.mp4",
"http://vfx.mtime.cn/Video/2019/03/12/mp4/190312083533415853.mp4",
"http://vfx.mtime.cn/Video/2019/03/09/mp4/190309153658147087.mp4",
};
MediaPlayermediaPlayer;
public Mv(Context context) {
super(context);
init();
}
//重写的方法
public Mv(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
//自己写的方法
private void init() {
mediaPlayer =new MediaPlayer();
getHolder().addCallback(this);
}
@Override
public void surfaceCreated(@NonNull SurfaceHolder surfaceHolder) {
mediaPlayer.setDisplay(surfaceHolder);
}
@Override
public void surfaceChanged(@NonNull SurfaceHolder surfaceHolder, int i, int i1, int i2) {
}
@Override
public void surfaceDestroyed(@NonNull SurfaceHolder surfaceHolder) {
}
//播放准备
public void play(String url){
mediaPlayer.reset();
try {
mediaPlayer.setDataSource(url);
mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(final MediaPlayer mediaPlayer) {
mediaPlayer.start();
}
});
}catch (IOException e) {
e.printStackTrace();
}
}
//暂停
public void pase() {
mediaPlayer.pause();
}
//继续
public void jx() {
mediaPlayer.start();
}
//上一首
public void last() {
index--;
if (index<0){
index=video.length-1;
}
play(video[index]);
}
//下一首
public void next() {
index++;
if (index>=video.length-1){
index=0;
}
play(video[index]);
}
//获取当前进度
public int getCurrrent(){
if (mediaPlayer!=null){
return mediaPlayer.getCurrentPosition();
}
return 0;
}
//获得总长度
public int getDuration(){
return mediaPlayer.getDuration();
}
}
在Fragment的使用
public class MusicFragmentextends Fragment {
private Mvsur;
private ButtonbtnPause;
private ButtonbtnResume;
private ButtonbtnLast;
private ButtonbtnNext;
private SeekBarsb;
private Timertimer;
@Override
public ViewonCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View inflate = inflater.inflate(R.layout.fragment_music, container, false);
sur = inflate.findViewById(R.id.sur);
sb=inflate.findViewById(R.id.sb);
btnPause = inflate.findViewById(R.id.btn_pause);
btnResume = inflate.findViewById(R.id.btn_resume);
btnLast = inflate.findViewById(R.id.btn_last);
btnNext = inflate.findViewById(R.id.btn_next);
//调用播放方法注意是作为一个控件进行调用不是方法直接调用
sur.play(Mv.video[0]);
//进度条的设置
timer=new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
sb.setMax(sur.getDuration());
sb.setProgress(sur.getCurrrent());
}
},0,100);
btnPause.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sur.pase();
}
});
btnResume.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sur.jx();
}
});
btnNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sur.next();
}
});
btnLast.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sur.last();
}
});
return inflate;
}
}
布局
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".frg.MusicFragment">
android:id="@+id/sur"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:id="@+id/btn_pause"
android:text="暂停"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
android:layout_marginLeft="90dp"
android:id="@+id/btn_resume"
android:text="继续"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
android:layout_marginLeft="180dp"
android:id="@+id/btn_last"
android:text="上一个"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
android:layout_marginLeft="270dp"
android:id="@+id/btn_next"
android:text="下一个"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
android:id="@+id/sb"
android:layout_marginTop="@dimen/dp_60"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_40">
</FrameLayout>