在我的应用中,我创建var hidden, visibilityChange;
if (typeof document.hidden !== "undefined") {
hidden = "hidden";
visibilityChange = "visibilitychange";
} else if (typeof document.mozHidden !== "undefined") {
hidden = "mozHidden";
visibilityChange = "mozvisibilitychange";
} else if (typeof document.msHidden !== "undefined") {
hidden = "msHidden";
visibilityChange = "msvisibilitychange";
} else if (typeof document.webkitHidden !== "undefined") {
hidden = "webkitHidden";
visibilityChange = "webkitvisibilitychange";
}
function handleVisibilityChange() {
if (document[hidden]) {
// code hid
} else {
// code normal
}
}
if (typeof document.addEventListener === "undefined" || typeof hidden === "undefined") {
}
else {
document.addEventListener(visibilityChange, handleVisibilityChange, false);
}
并使用ANativeWindow API在NDK中使用它:SurfaceView
然后ANativeWindow_lock
。
表面的大小由ANativeWindow_unlockAndPost
设置为320x480。屏幕尺寸更大 - 480x800。
使用LayoutParams将SurfaceView拉伸到几乎全屏。
我看到的问题是我的帧只在320x480的范围内刷新。
只有在顶部有另一个视图动画或者我在曲面视图上明确调用ANativeWindow_setBuffersGeometry
时,才会刷新曲面的另一部分。但是,postInvalidate
可以延迟使用。
仅在具有2.3.6的Nexus S上发生https://developers.google.com/android/nexus/images(2.3.6(GRK39F))的ROM。 4.0.4的同一设备没有这个错误。
使用2.3.6在Samsung Ace-2上正常工作。也适用于更高版本的Android。
有没有人见过这样的错误?很确定这是特定手机上的一个错误。有什么建议如何解决这个问题?
答案 0 :(得分:0)
经过一些调试和阅读SurfaceView的源代码后,我找到了解决方案。显然,ANativeWindow_setBuffersGeometry
是不够的,大小也应该从java设置。这对我有所帮助:
public void surfaceCreated(SurfaceHolder holder) {
holder.setFixedSize(BuildConfig.VIDEO_WIDTH, BuildConfig.VIDEO_HEIGHT);
}