SurfaceView播放视频简单版,包括上一个下一个进度条

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>

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容