DetailVideo-一个无缝切换的GSYVideoPlayer

GSYVideoPlayer是一款开源并且强大的Android视频播放器,具体的可以看官网GSY,里面有很多例子,但是我现在有个需求,需要播放器的进度状态等能无缝的从一个切换到另一个,两者保持一致。Demo中只有从列表切换到详情的时候可以,但是从详情返回时列表重新加载视频了,所以研究了下如何实现双重无缝切换的。

经过研究发现,最重要的是cloneParams方法,该方法会把AVideo的参数状态等克隆到BVideo,然后addTextureView添加播放的view就可以了,具体代码如下:

public class DetailVideo extends StandardGSYVideoPlayer {

    public DetailVideo(Context context, Boolean fullFlag) {
        super(context, fullFlag);
    }

    public DetailVideo(Context context) {
        super(context);
    }

    public DetailVideo(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void init(Context context) {
        super.init(context);
    }

    public void setSurfaceToPlay() {
        addTextureView();

        startProgressTimer();

        getGSYVideoManager().setLastListener(this);
        getGSYVideoManager().setListener(this);

        checkoutState();
    }

    public DetailVideo saveState() {
        DetailVideo switchVideo = new DetailVideo(getContext());
        cloneParams(this, switchVideo);
        return switchVideo;
    }

    public void cloneState(DetailVideo switchVideo) {
        cloneParams(switchVideo, this);
    }
}

效果GIF图片

SVID_20200902_170214_144444.gif

可以看到切换时无缝衔接,Good!
最后,留下Demo地址

你可能感兴趣的:(DetailVideo-一个无缝切换的GSYVideoPlayer)