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

ExoPlayer技术问询:如何判断控制器是否显示以实现切换功能?

实现ExoPlayer PlayerView的控制器切换(toggle)功能

其实要实现控制器的显示/隐藏切换,核心就是先判断当前控制器的可见状态,再调用对应的showController()或hideController()方法。下面分两种常用语言给你具体的实现方案:

第一步:判断控制器的当前可见状态

PlayerView的控制器本质是PlayerControlView,你可以通过playerView.getController()获取它的实例,然后通过视图可见性来判断状态:

  • 当控制器的getVisibility()返回View.VISIBLE时,说明当前处于显示状态;
  • 返回View.GONE或View.INVISIBLE时,则处于隐藏状态。

哪怕你用了自定义控制器布局(通过XML的app:controller_layout_id或代码setControllerLayoutId()指定),这个判断逻辑依然有效——因为自定义布局最终会被加载到PlayerControlView内部,ExoPlayer会同步两者的可见状态。

第二步:实现toggleController方法

Kotlin 实现(简洁推荐)

给PlayerView写一个扩展函数,直接调用即可:

fun PlayerView.toggleController(animate: Boolean = true) {
    val controller = this.controller ?: return
    if (controller.visibility == View.VISIBLE) {
        this.hideController(animate)
    } else {
        this.showController(animate)
    }
}

使用示例:

// 默认带动画切换
player_view.toggleController()
// 不带动画切换
player_view.toggleController(animate = false)

Java 实现

可以写一个静态工具类方法:

public class ExoPlayerHelper {
    // 带动画的切换方法
    public static void toggleController(PlayerView playerView) {
        toggleController(playerView, true);
    }

    // 可控制是否带动画的重载方法
    public static void toggleController(PlayerView playerView, boolean animate) {
        PlayerControlView controller = playerView.getController();
        if (controller == null) return;
        if (controller.getVisibility() == View.VISIBLE) {
            playerView.hideController(animate);
        } else {
            playerView.showController(animate);
        }
    }
}

使用示例:

// 默认带动画
ExoPlayerHelper.toggleController(playerView);
// 不带动画
ExoPlayerHelper.toggleController(playerView, false);

额外注意事项

  • 如果你设置了控制器自动隐藏(比如XML里的app:show_timeout属性),切换操作不会干扰这个自动隐藏逻辑,之后控制器依然会按照设定的超时时间自动隐藏。
  • 自定义控制器布局的可见性会被ExoPlayer内部自动同步到PlayerControlView,不需要你额外处理状态同步问题。

内容的提问来源于stack exchange,提问作者chowey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:13:49