说明一下:写文章时,我用的最新sdk版本是 4.7.0 哦,这里也只贴出关键代码,更多详细代码在文章末尾有地址链接的。
1 视频试看功能的实现
效果图:
4.7.0的版本的demo中并没有完整的实现视频试看的功能,这里结合自己理解,完善了一下该功能。
关键代码如下:
在AliyunVodPlayerView 类中新增的方法:
/**
* 试看view 袁培凯 add
*
* @param isStartTrailer
* @param trailerDuration 单位:毫秒
*/
public void startTrailersView(boolean isStartTrailer, int trailerDuration) {
this.isStartTrailer = isStartTrailer;
this.trailerDuration = trailerDuration;
trailersView = new TrailersView(getContext());
//trailersView.startTrailer();
trailersView.hideAll();
addSubView(trailersView);
}
/**
* 关闭试看 袁培凯 add
*/
public void trailersClosed() {
this.isStartTrailer = false;
if (trailersView != null) {
trailersView.hideAll();
start();
}
}
在mControlView.setOnSeekListener中,onProgressChanged回调监听中的添加如下:
@Override
public void onProgressChanged(int progress, boolean fromUser) {
if (fromUser) {
requestBitmapByPosition(progress);
}
if (isStartTrailer && progress > trailerDuration) {
pause();
trailersView.endTrailer();
trailersView.setCurrentProgress(true);
mControlView.setVideoPosition(trailerDuration);
requestBitmapByPosition(trailerDuration);
}
}
//开启试看,并且试看30秒
mAliyunVodPlayerView.startTrailersView(true, 1 * 30 * 1000);
2 防淘宝列表滑动,视频小窗口播放的功能实现
效果图:
实现思路:
- 监听滑动布局,滚动的高度 大于 视频的高度时
- 动态添加小窗口布局,移除顶部的视频播放布局
- 为了不让总布局的高度发生变化,移除顶部的视频播放布局时,动态添加一个同样高度的view。
- 滚动的高度 小于 视频的高度时,反过来就可以啦!
关键代码如下:
mNestedScrollView.addOnScrollChangedListener(new CustomNestedScrollView.OnScrollChangedListener() {
@Override
public void scrollChangedListener(int y) {
if (y >= videoPlayHeight) {//顶部播放器不可见了
if (!isSmallVideoDisplay) {
isSmallVideoDisplay = true;
mAliyunVodPlayerView.setControlBarCanShow(false);
mLinearLayout.post(new Runnable() {
@Override
public void run() {
mLinearLayout.removeView(mAliyunVodPlayerView);
mLinearLayout.addView(mView, 0, new FrameLayout.LayoutParams(0, videoPlayHeight));
layoutParamsSmallVideo = new FrameLayout.LayoutParams(smallVideoHeight, smallVideoHeight);
layoutParamsSmallVideo.gravity = Gravity.CENTER_VERTICAL | Gravity.RIGHT;
layoutParamsSmallVideo.rightMargin = 20;
mFrameLayout.addView(mAliyunVodPlayerView, layoutParamsSmallVideo);
}
});
}
} else {
if (isSmallVideoDisplay) {
isSmallVideoDisplay = false;
mAliyunVodPlayerView.setControlBarCanShow(true);
mFrameLayout.post(new Runnable() {
@Override
public void run() {
mFrameLayout.removeView(mAliyunVodPlayerView);
mLinearLayout.removeView(mView);
mLinearLayout.addView(mAliyunVodPlayerView, 0, layoutParams);
}
});
}
}
}
});