如何解决exo_player_control_view遮挡buffering进度条导致其变暗的问题
解决方案
问题根因:半透明遮罩的绘制层级高于缓冲进度条,半透明黑色叠加在白色进度条上导致颜色变深,只需要调整两者的层级关系即可解决。
方案1:调整遮罩布局位置(最推荐)
你当前的布局结构大概率如下:
exo_player_control_view 根布局 └── 80%透明度黑色遮罩(顶层声明) └── 所有控制控件(播放按钮、进度条、缓冲条等)
Android 布局中后声明的 View 默认层级更高,你只需要调整布局声明顺序,把缓冲进度条及进度条容器移到遮罩的后面声明即可,调整后结构参考:
exo_player_control_view 根布局 ├── 80%透明度黑色遮罩 ├── 播放/暂停按钮、快进快退按钮、标题等普通控制控件 └── 进度条容器(包含播放进度条、buffering 缓冲进度条)
方案2:直接提升缓冲进度条的Z轴高度
如果不方便调整整体布局结构,可以直接给缓冲进度条设置更高的Z轴数值,让它浮在遮罩上方:
- 找到控制布局中缓冲进度条控件,ExoPlayer 默认的缓冲进度条id为
@id/exo_buffering - 给该控件添加如下属性:
<!-- 数值只要大于半透明遮罩的 elevation 即可,默认无 elevation 时2dp就足够生效 --> android:elevation="2dp" android:translationZ="2dp"
方案3:优化遮罩实现逻辑(适用遮罩做点击热区的场景)
如果你添加半透明遮罩是为了做「点击控制器区域外隐藏控制器」的触摸热区,可以直接优化遮罩实现避免遮挡:
- 将遮罩的背景从80%黑色替换为完全透明,仅保留触摸监听能力,自然不会遮挡进度条
- 如果需要控制器显示时才展示半透明背景,直接给控制布局的根View设置背景即可,不需要额外加一层遮罩View:
// 控制器显示时设置半透明背景 rootView.setBackgroundColor(0xCC000000) // 控制器隐藏时清空背景 rootView.setBackgroundColor(Color.TRANSPARENT)
内容的提问来源于stack exchange,提问作者G8 TU83
相关产品推荐
相关产品推荐

