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的高度还是原来的算法。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 刘海屏指的是手机屏幕正上方由于追求极致边框而采用的一种手机解决方案。因形似刘海儿而得名。也有一些其他叫法:挖...
    _九卿_阅读 6,251评论 0 26
  • 前言目前市面上的刘海屏和水滴屏手机越来越多了,颜值方面是因人而异,有的人觉得很好看,也有人觉得丑爆了,我个人觉得是...
    飘逸解构阅读 7,757评论 6 42
  • 1.前言 先吐槽一下,个人不喜欢刘海屏。然而作为苦逼的开发者,还是要去适配刘海屏的。好了,吐槽完毕,进入正题。 这...
    迷途小码农h阅读 1,731评论 0 6
  • 突如其来的雨,夹杂着浓浓的的泥土气息,随风扑面而来…… 雨带来的是清爽,也是植物最渴盼的,阳台上的绿植...
    罗琼_58a3阅读 227评论 0 0
  • 累了,就去看看海 不去想你,不再留恋 累了,就离开你 不想再见,也不愿再发生故事
    故是_eb7e阅读 108评论 1 2