Android-视频播放适配刘海屏一

做事就像一张大网,只有你走的够远,走的路够多,才能知道下个正确的节点在哪

昨天公司测试大佬提出个问题,公司项目在oppo的刘海屏上,播放的控制器被刘海盖住了。如图:


企业微信截图_15645436175541.png

看到这个首先想到的是再把距离调下点,但是这不是根除问题的方法,所以弃用该方法。

直接介绍我的解决办法:

项目用的是ijkPlayer,播放器有个控制器,在控制器布局中添加一个topView,如下:

        android:id="@+id/view_video_top"
        android:layout_width="match_parent"
        android:layout_height="@dimen/dp_0"
        android:background="@color/alpha_complete_black_7"/>  

VideoView中添加逻辑代码:

     * 刘海屏处理
     */
    public void UpdateLiuHaiScreen(){
        if (viewTop == null) {
            viewTop = contentView.findViewById(R.id.view_video_top);
        }
        if (getScreenOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {// 全屏幕
            if (ZYIsLiuHaiScreenUtils.hasNotchScreen(activity)){
                ViewGroup.LayoutParams params = viewTop.getLayoutParams();
                params.height = 0;
                viewTop.setLayoutParams(params);
                viewTop.setVisibility(VISIBLE);
            }
        } else {
            if (ZYIsLiuHaiScreenUtils.hasNotchScreen(activity) && Build.VERSION.SDK_INT < Build.VERSION_CODES.P){
                new ZYTranslucentStatus(activity).setSliderLayoutParams(VideoPlayView.this, ZYIsLiuHaiScreenUtils.hasNotchScreen(activity));
                ViewGroup.LayoutParams params = viewTop.getLayoutParams();
                params.height = ZYCommonUtils.getStatusBarHeight(context);
                viewTop.setLayoutParams(params);
                viewTop.setVisibility(VISIBLE);
            } else {
                new ZYTranslucentStatus(activity).setSliderLayoutParams(VideoPlayView.this);
            }
        }

    }

然后再初始化和切换竖屏模式时调用改方法,及可。

setSliderLayoutParams方法主要是处理VideoView的竖屏下高度问题,此处有一个小bug,适配刘海屏后,TopView高度设置后,VideoView的高度并没有增高,解决方法如下:


public void setSliderLayoutParams(ViewGroup viewGroup, boolean isLiuHai) {
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        layoutParams.width = getScreenPixels();
        if (isLiuHai){
            layoutParams.height = (getScreenPixels() * 9 / 16)+getStatusBarHeight();
        } else {
            layoutParams.height = (getScreenPixels() * 9 / 16);
        }
        viewGroup.setLayoutParams(layoutParams);
    }

如果是刘海屏的话,就在高度上添加上statusbar的高度。这里又出现一个问题 / 在小米8上测试发现statusbar的高度特别高,貌似是小米自己把刘海的高度处理了,所以出现这种问题。小米8的系统是基于API28的,我的处理方法是,再判断API版本,低于28才会去加上statusbar的高度,否则videoView的高度还是原来的算法。

你可能感兴趣的:(Android-视频播放适配刘海屏一)