最近接到个需求: 列表中播放视频 当视频正在播放中 用户将播放的该item滚动出屏幕时 在屏幕右下方出现一个小的浮动视频窗口继续播放视频 当用户将视频再滚动回播放的item时 再切换到该item 继续播放。
拿到需求的时候第一时间会想利用ListView+VideoView来实现列表播放,但现实往往是残酷的。Videoview继承于SurfaceView,而SurfaceView是没有UI同步缓冲区的这就导致了在列表滚动的时候,正在播放的视频需要跟上滚动的步伐,既然这条路走不通的话只能选择使用TextureView来处理了,在这里强烈推荐一个大神的库VideoPLayerManager 如果看官遇到类似的需求 那么这么个库可以帮上你很大的忙,但是我遇到的需求并没有这么简单 还需要很重要的一步是解决列表里面的视频和浮动播放窗口的切换问题。
我的思路是只持有一个MediaPlayer对象 不论是播放在ListView中还是悬浮播放窗口中,计算当前item是否滚动出屏幕 若滚出了屏幕就把浮动的TextureView传给MediaPlayer进行切换播放 当item又出现到屏幕上时 再将该Item中的TextureView传给MediaPlayer 这样就解决了视频的无缝切换
接下来就是处理ListView中的item的状态 例如时间的显示 seekbar播放进度显示等 我这是用的EventBus。如果各位看官大神 对于这个需求还有更好的解决方案欢迎留言或私信,我就在这先抛块砖 :)