gpt4 book ai didi

Android SurfaceView 导致屏幕闪烁

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:03:12 24 4
gpt4 key购买 nike

我正在开发适用于 Android 的多媒体视频处理应用程序,但遇到了一些问题。我正在使用 FragmentPagerAdapter 类,其中包含许多不同的 fragment ,用于视频处理的各个步骤。

我的第一个 Fragment 包含一个 SurfaceView 和一个提供它的 MediaPlayer,以及各种播放控件。当我从 fragment 1(使用 SurfaceView)滑动到 fragment 2(此时为空)时,我的问题就发生了。如果我还没有调用 start(),则不会发生任何异常情况,并且我能够正常地在 fragment 之间滑动。然而,一旦我调用 start(),当我滑动到下一个 Fragment 时,整个屏幕开始闪烁,即使我已经放置了 MediaPlayer 处于空闲状态并且它不向 SurfaceView 提供帧。唯一阻止这种情况的方法是通过滑动到第三个 Fragment 来破坏表面以及包含的 View ,因此 FragmentPagerAdapter 会破坏 Fragment 一个,或者通过主页或后退按钮退出应用程序,以便销毁 View 。

我这辈子都弄不明白为什么会这样,除此之外,SurfaceView 渲染线程可能以某种方式干扰了主 UI 线程。 LogCat 上也没有出现任何异常,所以我有点卡住了。我正在运行带有 Android 4.1 的 Galaxy Nexus 作为我的测试硬件。

如有任何帮助,我们将不胜感激!

JT

更新:我现在设法通过覆盖 FragmentPagerAdapter 中的 setPrimaryItem() 方法来调用方法来找到解决方法当视频播放器 Fragment停止显示,然后在再次激活时恢复 SurfaceView。不幸的是,发生这种情况时仍然有一点眨眼,所以如果有人有其他想法,我将不胜感激!

最佳答案

来自Android Developers Blog

This widget[SurfaceView] works by creating a new window placed behind your application’s window. It then punches a hole through your application’s window to reveal the new window.

Because a SurfaceView’s content does not live in the application’s window, it cannot be transformed (moved, scaled, rotated) efficiently. This makes it difficult to use a SurfaceView inside a ListView or a ScrollView.

如果您正在为 4.0 或更高版本构建,解决方案是使用 TextureView。如果您对使用 TextureView 显示视频感兴趣 this thread可能会有帮助

关于Android SurfaceView 导致屏幕闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12232583/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com