我正在研究Android的多媒体视频处理应用程序,我遇到了一些问题。我正在使用FragmentPagerAdapter
类,其中包含许多不同的片段,用于视频处理的各个步骤。
我的第一个Fragment
包含一个SurfaceView
和一个MediaPlayer
,以及各种播放控件。当我从片段1(使用SurfaceView)滑动到片段2(此时为空)时,我的问题就出现了。如果我还没有调用start()
,就不会发生任何异常情况,我可以正常地在片段之间滑动。然而,当我拨打start()
时,当我滑动到下一个Fragment
时,整个屏幕开始闪烁,即使我已将MediaPlayer
置于空闲状态且它没有进食帧到SurfaceView
。唯一阻止此操作的是通过滑动到第三个Fragment
来破坏表面以及包含视图,以便FragmentPagerAdapter
销毁Fragment
一个,或通过主页或后退按钮退出应用程序所以视图被破坏了。
我不能为我的生活弄清楚为什么会发生这种情况,除此之外,SurfaceView
渲染线程可能会以某种方式干扰主UI线程。 LogCat上也没有出现异常,所以我有点卡住了。我正在使用Android 4.1作为我的测试硬件运行Galaxy Nexus。
任何帮助将不胜感激!
JT
更新:我现在通过覆盖setPrimaryItem()
中的FragmentPagerAdapter
方法调用删除SurfaceView
的方法,找到了解决方法当视频播放器removeView()
停止显示时,从层次结构(在LinearLayout
容器上使用Fragment
)开始,然后在SurfaceView
再次激活时恢复{{1}}。不幸的是,当发生这种情况时仍然有点眨眼,所以如果有人有额外的想法,我将不胜感激!
答案 0 :(得分:4)
此小部件[SurfaceView]的工作原理是创建一个位于应用程序窗口后面的新窗口。然后它会在应用程序窗口中打出一个洞,以显示新窗口。
由于SurfaceView的内容不在应用程序窗口中,因此无法有效地转换(移动,缩放,旋转)。这使得在ListView或ScrollView中使用SurfaceView变得困难。
如果您正在构建4.0或更高版本,解决方案是使用TextureView。如果您对使用TextureView显示视频感兴趣this thread可能会有所帮助