1、需求:
页面头部是一个 视频,下面是章节内容和评论内容,要求视频播放时,视频在头部悬浮不能滑动,
下面的评论内容可以向上滑动, 视频暂停时,视频可以跟着布局一起向上滑动,如图
网上之前看过类似的需求,也没有太多网友解答 ,详见:android 界面上滑时如何控制视频控件置顶悬浮,但还能保证还能接着播放
2.实现:
2.1 阿里播放器
AliyunVodPlayerView SurfaceView实现,由于 SurfaceView不能支持平移等动画,采用网上提供的StickScrollView粘性布局去实现的时候,闪退了(由于 SurfaceView draw绘制与View的差异 以及 动画的原因,故不支持这种实现方式,普通的布局在悬停时,由于无需考虑视频播放的缘故,采用StickScrollView setTag sticky 的方式足以,视频播放器还是无法支持)
2.2 饺子播放器
此播放器 是TextureView的实现方式,所以 这种情况下,依旧可以使用 StickScrollView
2.4 知识点:Android中TextureView与SurfaceView用法区别总结
2.5 摸索半天,找到了一种实现方式.(CoordinatorLayout与AppBarLayout实现)
参考 : Android滑动到顶部悬停
这种实现方式下,还需要趟浑水,遇到的坑还是有不少的,需要一个一个的填
//重点 : 对于ScrollFlag的设置
app:layout_scrollFlags="scroll"
出现的问题:
1、Android之解决AppBarLayout 下面一道阴影
关于视频横竖屏切换全屏问题
2、全屏设置时 setSystemUiVisibility的理解
以下部分代码为阿里云播放器,结合项目需求所做:
切换时: 动态设置 Video布局的宽高 以及滑动状态,页面全屏控制等等以及自己的业务相关
//横竖屏切换
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
isChangeScreen=true;
updatePlayerViewMode();
}
private void updatePlayerViewMode() {
if (mAliyunVodPlayerView != null) {
int orientation = getResources().getConfiguration().orientation;
mOrientation=orientation;
//设置滑动
if(mOrientation==Configuration.ORIENTATION_PORTRAIT){
//播放时,视频不能滑动
setVideoScrollEnabled(mAliyunVodPlayerView.isPlaying() ? false:true);
}else{
//切换为横屏,视频不能滑动
setVideoScrollEnabled(false);
}
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
mAliyunVodPlayerView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
//设置view的布局,宽高之类
// LinearLayout.LayoutParams aliVcVideoViewLayoutParams = (LinearLayout.LayoutParams) mAliyunVodPlayerView
// .getLayoutParams();
CollapsingToolbarLayout.LayoutParams aliVcVideoViewLayoutParams= (CollapsingToolbarLayout.LayoutParams) mAliyunVodPlayerView.getLayoutParams();
aliVcVideoV