与MediaPlayer一起使用后如何清除SurfaceTexture?

我正在使用一个ListView与TextureView儿童。 TextureView使用MediaPlayer播放video。 当TextureView被回收时,最后一帧保持在表面上,直到下一个MediaPlayer使用它。

什么是最简单的方法来“清除”TextureView的表面(如黑色),所以旧的框架不会出现?

Solutions Collecting From Web of "与MediaPlayer一起使用后如何清除SurfaceTexture?"

经过一段时间的努力之后,我想出了一些可能的解决scheme:

a)使用GLES清除表面。 你可以在Grafika中看到一个例子(查看clearSurface()方法)。 我个人不是这样的粉丝,因为我不认为向黑色的震撼转换看起来特别好,如果你还没有使用GL代码,这是一个相当大的技术开销。 此外,这似乎只适用于API 17+。

b)我select的解决scheme是简单地创build一个新的TextureView,并将其添加到适当的视图,每次我想播放video,而不是重复使用旧的。 我会毫不犹豫地称这是一个很好的解决scheme,但这是我能find的最不可怕的一个。

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

祝你好运,这是非常令人沮丧的尝试修复。