运行 CardView 布局中的媒体文件

Run media file in CardView layout

有没有办法在 cardview 布局中拥有媒体文件 (audio/video) 运行?我想在 card layout 中预览文件 video,当用户点击卡片时,video/audio 会全屏播放,就像 Facebook 的提要一样。

为了获得那种功能,您必须解决一些问题:

  1. 您不能在列表中使用 VideoView,因为它正在扩展 SurfaceView,并且如果正在播放且用户开始滚动, 视觉效果看起来就像视频试图抓住滚动条一样。所以你需要一个基于其他东西的特殊 VideoView,例如 TextureView.

  2. 管理视频播放器状态: 为了start/stop回放我们需要调用MediaPlayer.class:

    的几个方法
    setDataSource()
    prepare()
    start()
    stop()
    reset()
    release()
    

    这些方法是对硬件的直接调用,硬件可能需要一些时间才能响应。所以我们不能在UI线程中调用它。它会阻止它超过 16 毫秒,因此用户会看到一个滞后的滚动列表。我们必须从后台线程调用它。

  3. 您需要在 运行 时间内跟踪屏幕上哪个视图处于活动状态 并且该视图应该正在播放。


我创建了一个名为 VideoPlayerManager 的开源项目。

它有详尽的文档记录,并且在演示应用程序中处理了一些基本流程。它尚未准备好投入生产,但如果您需要一些关于如何获得此类功能的参考,您可以在那里找到它。

P.S。关于CardView:是常规视图。可以放一个视频播放器进去,在CardView中播放视频。