如何判断Android MediaController视图何时可见
关于MediaController可见状态变化监听的解决方案
原生Android的MediaController并没有提供直接监听其可见状态变化的内置监听器,但可以通过自定义MediaController子类的方式实现该需求,核心思路是重写控制显示/隐藏的关键方法,并添加自定义回调接口来对外通知状态变化。
实现步骤:
- 自定义继承自
MediaController的子类,添加可见状态变化的监听接口 - 重写
show()、show(int timeout)和hide()方法,在方法执行时触发自定义回调 - 使用自定义控制器时设置监听器,即可捕获显示/隐藏时机
代码示例:
public class CustomMediaController extends MediaController { private OnVisibilityChangedListener mVisibilityListener; public CustomMediaController(Context context) { super(context); } // 自定义可见状态变化监听接口 public interface OnVisibilityChangedListener { void onControllerShow(); void onControllerHide(); } public void setOnVisibilityChangedListener(OnVisibilityChangedListener listener) { mVisibilityListener = listener; } @Override public void show() { super.show(); if (mVisibilityListener != null) { mVisibilityListener.onControllerShow(); } } @Override public void show(int timeout) { super.show(timeout); if (mVisibilityListener != null) { mVisibilityListener.onControllerShow(); } } @Override public void hide() { super.hide(); if (mVisibilityListener != null) { mVisibilityListener.onControllerHide(); } } }
使用方式:
// 初始化自定义控制器并绑定VideoView CustomMediaController mediaController = new CustomMediaController(this); mediaController.setAnchorView(videoView); videoView.setMediaController(mediaController); // 设置状态监听 mediaController.setOnVisibilityChangedListener(new CustomMediaController.OnVisibilityChangedListener() { @Override public void onControllerShow() { // 控制器显示时执行的逻辑 } @Override public void onControllerHide() { // 控制器隐藏时执行的逻辑 } });
通过这种方式,就能精准捕获MediaController的显示和隐藏时机,满足业务需求。
内容的提问来源于stack exchange,提问作者penecay
相关产品推荐
相关产品推荐

