如何在使用MediaPlayer后清除SurfaceTexture?

Gil*_*ert 12 android textureview

我正在使用带有TextureView子项的ListView.TextureView使用MediaPlayer播放视频.当TextureView被回收时,最后一帧保留在曲面上,直到下一个MediaPlayer使用它.

什么是"清除"TextureView表面(例如黑色)的最简单方法,以便不显示旧框架?

gcg*_*ant 9

经过一段时间的努力,我想出了几个可能的解决方案:

a)使用GLES清除表面.您可以在Grafika中看到一个示例(请查看clearSurface()方法).我个人并不喜欢这个,因为我不认为对黑色的刺激过渡看起来特别好,如果你还没有使用GL代码,这是一个相当大的技术开销.此外,这似乎只适用于API 17+.

b)我选择的解决方案是简单地创建一个新的TextureView,并在每次我想播放视频时将其添加到适当的视图中,而不是重复使用旧视频.我会毫不犹豫地称这是一个很好的解决方案,但这是我能找到的最不可怕的解决方案.

c)如果你再次播放同一个视频,你可以做的一件事就是在播放完毕后尝试寻找视频的第一帧.然后,下一次最后一帧闪烁时,它将不可见,因为它将与视频的开头相同.我在这方面取得了一些成功,但无法让它在所有设备上可靠地工作.它也很明显是一个黑客.

祝你好运,尝试解决这个问题非常令人沮丧.