0

在我的应用程序中,我SurfaceView使用 ANativeWindow API 从 NDK 创建和使用它:ANativeWindow_lock然后ANativeWindow_unlockAndPost.

表面的大小设置ANativeWindow_setBuffersGeometry为 320x480。屏幕尺寸更大 - 480x800。

SurfaceView 使用 LayoutParams 拉伸到几乎全屏。

我看到的问题是我的帧仅在 320x480 区域内刷新。

截屏

仅当顶部有另一个视图动画或我明确调用postInvalidate表面视图时,才会刷新表面的另一部分。但是,postInvalidate延迟工作。

这只发生在带有 2.3.6 的 Nexus S 上,带有来自https://developers.google.com/android/nexus/images (2.3.6 (GRK39F)) 的 ROM。带有 4.0.4 的同一设备没有此错误。

在带有 2.3.6 的三星 Ace-2 上运行良好。也可以在更高版本的 android 上完美运行。

有没有人见过这样的错误?很确定这是该特定手机上的错误。有什么建议可以解决这个问题吗?

4

1 回答 1

0

经过一番调试和阅读 SurfaceView 的源代码后,我找到了解决方案。显然,ANativeWindow_setBuffersGeometry还不够,大小也应该从 java.xml 设置。这帮助了我:

public void surfaceCreated(SurfaceHolder holder) { holder.setFixedSize(BuildConfig.VIDEO_WIDTH, BuildConfig.VIDEO_HEIGHT); }

于 2015-05-10T23:27:11.363 回答