运行 CardView 布局中的媒体文件
Run media file in CardView layout
有没有办法在 cardview
布局中拥有媒体文件 (audio/video
) 运行?我想在 card layout
中预览文件 video
,当用户点击卡片时,video/audio
会全屏播放,就像 Facebook 的提要一样。
为了获得那种功能,您必须解决一些问题:
您不能在列表中使用 VideoView
,因为它正在扩展 SurfaceView
,并且如果正在播放且用户开始滚动, 视觉效果看起来就像视频试图抓住滚动条一样。所以你需要一个基于其他东西的特殊 VideoView
,例如 TextureView
.
管理视频播放器状态:
为了start/stop回放我们需要调用MediaPlayer.class
:
的几个方法
setDataSource()
prepare()
start()
stop()
reset()
release()
这些方法是对硬件的直接调用,硬件可能需要一些时间才能响应。所以我们不能在UI线程中调用它。它会阻止它超过 16 毫秒,因此用户会看到一个滞后的滚动列表。我们必须从后台线程调用它。
您需要在 运行 时间内跟踪屏幕上哪个视图处于活动状态 并且该视图应该正在播放。
我创建了一个名为 VideoPlayerManager 的开源项目。
它有详尽的文档记录,并且在演示应用程序中处理了一些基本流程。它尚未准备好投入生产,但如果您需要一些关于如何获得此类功能的参考,您可以在那里找到它。
P.S。关于CardView:是常规视图。可以放一个视频播放器进去,在CardView中播放视频。
有没有办法在 cardview
布局中拥有媒体文件 (audio/video
) 运行?我想在 card layout
中预览文件 video
,当用户点击卡片时,video/audio
会全屏播放,就像 Facebook 的提要一样。
为了获得那种功能,您必须解决一些问题:
您不能在列表中使用
VideoView
,因为它正在扩展SurfaceView
,并且如果正在播放且用户开始滚动, 视觉效果看起来就像视频试图抓住滚动条一样。所以你需要一个基于其他东西的特殊VideoView
,例如TextureView
.管理视频播放器状态: 为了start/stop回放我们需要调用
的几个方法MediaPlayer.class
:setDataSource() prepare() start() stop() reset() release()
这些方法是对硬件的直接调用,硬件可能需要一些时间才能响应。所以我们不能在UI线程中调用它。它会阻止它超过 16 毫秒,因此用户会看到一个滞后的滚动列表。我们必须从后台线程调用它。
您需要在 运行 时间内跟踪屏幕上哪个视图处于活动状态 并且该视图应该正在播放。
我创建了一个名为 VideoPlayerManager 的开源项目。
它有详尽的文档记录,并且在演示应用程序中处理了一些基本流程。它尚未准备好投入生产,但如果您需要一些关于如何获得此类功能的参考,您可以在那里找到它。
P.S。关于CardView:是常规视图。可以放一个视频播放器进去,在CardView中播放视频。