如何在使用MediaPlayer后清除SurfaceTexture?

时间:2014-10-14 07:55:55

标签: android textureview

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

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

2 个答案:

答案 0 :(得分:9)

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

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

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

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

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

答案 1 :(得分:2)

2020年最简单的方法是简单地将纹理视图的Alpha设置为0。

mTextureView.setAlpha(0);