如何在ExoPlayer的PlayerControlView中显示缓冲加载动画?
解决ExoPlayer PlayerControlView不显示缓冲加载动画的问题
一、添加布局属性开启缓冲显示
PlayerControlView默认不会自动显示转圈的缓冲加载动画,需要手动添加show_buffering属性来控制:
在布局代码中加入app:show_buffering="when_playing",该属性有三个可选值:
never:从不显示缓冲动画when_playing:仅在播放状态下缓冲时显示always:始终显示(包括暂停状态)
修改后的完整布局代码:
<androidx.media3.ui.PlayerControlView android:id="@+id/player_control_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentBottom="true" app:show_rewind_button="false" app:show_fastforward_button="false" app:show_previous_button="false" app:show_next_button="false" app:animation_enabled="true" app:ad_marker_width="100dp" app:show_vr_button="false" app:buffered_color="@color/white" app:show_buffering="when_playing" />
二、检查自定义控制视图(若修改过exo_player_control_view)
如果你自定义了PlayerControlView的布局文件,需要确保:
- 布局中包含ID为
@id/exo_buffering的加载视图(通常是ProgressBar) - 视图默认可见性设为
gone,PlayerControlView会根据缓冲状态自动切换其显示/隐藏
示例自定义布局中的缓冲视图代码:
<ProgressBar android:id="@id/exo_buffering" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:visibility="gone" />
三、确保Player实例正确绑定
确认你已将ExoPlayer实例正确关联到PlayerControlView,否则控制视图无法感知缓冲状态:
// Kotlin 示例 val player = ExoPlayer.Builder(context).build() player_control_view.player = player
// Java 示例 ExoPlayer player = new ExoPlayer.Builder(context).build(); player_control_view.setPlayer(player);
补充建议
建议使用Media3(原ExoPlayer)的最新稳定版本,旧版本可能存在相关功能缺陷。
内容的提问来源于stack exchange,提问作者Shawon
相关产品推荐
相关产品推荐

