页面中间视频横竖屏播放问题处理

序 、好久没有写博客了,最近在忙商业的“大事” 。世间的道理就是这样:有用的都会错 ,不会错的都没用 。所以你要出来做事就会犯错 ,你要想不犯错,就只剩下到的优越感 。

上个版本要在题库的做题页面加一个视频解析功能 ,可以看视频 ,可以当前页面横竖屏播放 。由于时间紧迫 ,当时跟产品对了一下重新实现页面效果 ,播放视频跳转到新的页面 。难度降了N个等级 。这不,上完线之后开始来优化遗留的技术债务 。

 

效果图如下 。

播放视频窗口在页面中间 ,横屏的时候也就是让页面全屏播放 ,简单理解就是设置 MATCH_PARENT 。由于层级问题所以直接设置的话是不可以的 ,可以试一下看看效果 。然后参考了GSYVideolayer 的实现逻辑 。



代码如下:

@Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        if (fl_video_container == null) fl_video_container = findViewById(R.id.fl_video_container);
        if (parent_video == null) parent_video = findViewById(R.id.parent_video);
        if (viewGroup == null) viewGroup = findViewById(Window.ID_ANDROID_CONTENT);
        final ConstraintLayout.LayoutParams lpParent = new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

        RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) parent_video.getLayoutParams();

        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { // 此时为横屏
            mIsFullScreen = true;
            ViewGroup.LayoutParams layoutParams = fl_video_container.getLayoutParams();
            layoutParams.width = LinearLayout.LayoutParams.MATCH_PARENT;
            layoutParams.height = LinearLayout.LayoutParams.MATCH_PARENT;
            params.width = LinearLayout.LayoutParams.MATCH_PARENT;
            params.height = LinearLayout.LayoutParams.MATCH_PARENT;

            frameLayout.setBackgroundColor(Color.BLACK);
            fl_video_container.setLayoutParams(layoutParams);
            parent_video.removeView(fl_video_container);
            ViewParent parent = fl_video_container.getParent();
            frameLayout.addView(fl_video_container);
            viewGroup.addView(frameLayout, lpParent);
        } else {
            mIsFullScreen = false;
            ViewGroup.LayoutParams layoutParams = fl_video_container.getLayoutParams();
            layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
            layoutParams.height = getResources().getDimensionPixelSize(R.dimen.xdp_220);
            params.width = LinearLayout.LayoutParams.MATCH_PARENT;
            params.height = LinearLayout.LayoutParams.WRAP_CONTENT;

            frameLayout.setBackgroundColor(Color.TRANSPARENT);
            frameLayout.removeView(fl_video_container);
            viewGroup.removeView(frameLayout);
            fl_video_container.setLayoutParams(layoutParams);
            parent_video.setLayoutParams(params);
            parent_video.addView(fl_video_container);
            ConstraintLayout.LayoutParams params1 = (ConstraintLayout.LayoutParams) fl_video_container.getLayoutParams();
            params1.topToBottom = R.id.tv_video_title;
            params1.leftToLeft = ConstraintLayout.LayoutParams.PARENT_ID;
            params1.leftMargin = getResources().getDimensionPixelSize(R.dimen.xdp_15);
            params1.rightMargin = getResources().getDimensionPixelSize(R.dimen.xdp_15);
            params1.topMargin = getResources().getDimensionPixelSize(R.dimen.xdp_10);
            fl_video_container.setLayoutParams(params1);
        }
    }

原理

实现原理是 ,把视频放在最顶层的容器 (视频设置 MATCH_PARENT)。

viewGroup = findViewById(Window.ID_ANDROID_CONTENT);

 

 

END、告辞,继续去码代码 。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值