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图片
可以看到切换时无缝衔接,Good!
最后,留下Demo地址