0

私のアプリでは、SurfaceViewANativeWindow API を使用して NDK から作成して使用しANativeWindow_lockますANativeWindow_unlockAndPost

サーフェスのサイズはANativeWindow_setBuffersGeometry320x480 に設定されています。画面サイズが大きくなり、480x800 になりました。

SurfaceView は、LayoutParams を使用してほぼフルスクリーンに引き伸ばされます。

私が見ている問題は、フレームが 320x480 の領域でのみ更新されることです。

スクリーンショット

postInvalidateサーフェスの他の部分は、上にアニメーション化されている別のビューがある場合、またはサーフェス ビューを明示的に呼び出した場合にのみ更新されます。ただし、postInvalidate動作が遅くなります。

これは、 https ://developers.google.com/android/nexus/images (2.3.6 (GRK39F))の ROM を使用した 2.3.6 の Nexus S でのみ発生します。4.0.4 の同じデバイスには、このバグはありません。

2.3.6 の Samsung Ace-2 で正常に動作します。Androidの上位バージョンでも完全に動作します。

誰もそのようなバグを見たことがありますか?その特定の電話のバグであることは間違いありません。これを回避する方法はありますか?

4

1 に答える 1

0

SurfaceViewのソースコードを少しデバッグして読んだ後、解決策を見つけました。どうやら、ANativeWindow_setBuffersGeometry十分ではなく、サイズもJavaから設定する必要があります。これは私を助けました:

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

于 2015-05-10T23:27:11.363 に答える