9

我的应用程序的上半部分下面有VideoView一个MediaController。下半部分是带有一些按钮的图像。虽然MediaController是可见的,但下面的按钮是不可点击的。就像在MediaController可见时,它会拦截所有其他触摸事件,即使它们不在MediaController.

有什么想法吗?

4

4 回答 4

12

您可以查看我关于覆盖dispatchTouchEvent()将点击传递MediaController到底层的答案Button,但我猜您使用 MediaController 的方式有问题。你能发布你的布局吗?

UPD: 实际上,就这样吧。我刚刚查看了MediaController代码,结果发现它Window为自己创建了一个新代码。这就是为什么您的点击没有被分派——它们被分派到另一个窗口。此外,据我从构造函数代码中可以看出,如果您通过 xml 扩展 MediaController(即在布局文件中使用它,然后仅通过代码中的 id 找到它) - 它不会创建额外的Window. 这很奇怪,但我相信他们这样做是有原因的。

因此,解决方案是尝试在布局文件中使用 MediaController 或使用CommonsWare 的解决方案。请让我知道它是如何进行的,以防您尝试使用 xml。

于 2012-09-17T14:12:44.013 回答
8

有什么想法吗?

不要使用MediaController. 创建您自己的控制器 UI,根据需要弹出并显示。虽然这个示例项目可能不再完全工作,因为我已经三年没有碰过它,但它展示了拥有自己的控制器面板,它会在触摸时弹出然后消失。

于 2012-09-16T17:21:18.420 回答
1

您能否提供您的 VideoView 实例化代码和用于切换 MediaPlayers 的代码?

无论如何,我怀疑这是否能正常工作,因为 VideoView 实例化了它自己的 MediaPlayer 并使用它来播放媒体。(见VideoView.java

您可能需要切换 VideoView 本身,或使用您自己的 SurfaceView 子类构建 VideoView 的替代品。

于 2012-09-16T03:28:59.440 回答
0

我遇到了同样的问题,由于媒体播放器导致我的 UI 元素阻塞,花了 5 个小时后我得到了解决方案

我只是将 mediaPlayer.prepare() 替换为 mediaPlayer.prepareAsync();

于 2016-07-30T07:55:41.437 回答