我的应用程序的上半部分下面有VideoView
一个MediaController
。下半部分是带有一些按钮的图像。虽然MediaController
是可见的,但下面的按钮是不可点击的。就像在MediaController
可见时,它会拦截所有其他触摸事件,即使它们不在MediaController
.
有什么想法吗?
我的应用程序的上半部分下面有VideoView
一个MediaController
。下半部分是带有一些按钮的图像。虽然MediaController
是可见的,但下面的按钮是不可点击的。就像在MediaController
可见时,它会拦截所有其他触摸事件,即使它们不在MediaController
.
有什么想法吗?
您可以查看我关于覆盖dispatchTouchEvent()
将点击传递MediaController
到底层的答案Button
,但我猜您使用 MediaController 的方式有问题。你能发布你的布局吗?
UPD:
实际上,就这样吧。我刚刚查看了MediaController
代码,结果发现它Window
为自己创建了一个新代码。这就是为什么您的点击没有被分派——它们被分派到另一个窗口。此外,据我从构造函数代码中可以看出,如果您通过 xml 扩展 MediaController(即在布局文件中使用它,然后仅通过代码中的 id 找到它) - 它不会创建额外的Window
. 这很奇怪,但我相信他们这样做是有原因的。
因此,解决方案是尝试在布局文件中使用 MediaController 或使用CommonsWare 的解决方案。请让我知道它是如何进行的,以防您尝试使用 xml。
有什么想法吗?
不要使用MediaController
. 创建您自己的控制器 UI,根据需要弹出并显示。虽然这个示例项目可能不再完全工作,因为我已经三年没有碰过它,但它展示了拥有自己的控制器面板,它会在触摸时弹出然后消失。
您能否提供您的 VideoView 实例化代码和用于切换 MediaPlayers 的代码?
无论如何,我怀疑这是否能正常工作,因为 VideoView 实例化了它自己的 MediaPlayer 并使用它来播放媒体。(见VideoView.java)
您可能需要切换 VideoView 本身,或使用您自己的 SurfaceView 子类构建 VideoView 的替代品。
我遇到了同样的问题,由于媒体播放器导致我的 UI 元素阻塞,花了 5 个小时后我得到了解决方案
我只是将 mediaPlayer.prepare() 替换为 mediaPlayer.prepareAsync();