You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 12:22:10