1

ユーザーが画面をロックして (上部の画面ロック ボタンを使用)、すぐにアプリケーションに戻る場合と、ユーザーがホーム ボタンを押してすぐにアプリケーションに戻る場合の違いがわかりません。

すべて同じ呼び出しが行われているようです。私の観察から:

ホームボタンまたは画面ロックが押されたときに呼び出されます: onPause -> onStop

ホームボタンまたは画面ロックが再度押された後にアプリケーションが押されたときに呼び出されます: onRestart -> onStart -> onResume

私の個人的な問題:

onResume で SurfaceView と GLSurfaceView を FrameLayout に再作成しているため、これは特に厄介ですが、押されたボタンに応じて、要素の順序が変更されます。onResume に次のコードがあります。

cameraPreviewArea = (FrameLayout) findViewById(id.camera_preview);
cameraPreviewArea.addView(glView, glLayout);
cameraPreviewArea.addView(camprevSurfaceView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

これには、次の状況で glSurfaceView を一番上に表示する効果があります: アプリが初めて起動されたとき、およびアプリが画面ロックから再開されてから画面ロック解除されたとき。ただし、ホームボタンを押してアプリケーションを再度開くと、SurfaceView が glSurfaceView の上に配置されます。

次のように addView 呼び出しを切り替えると、逆の状況が発生します。ブール値フラグを使用してこれを修正できますが、画面のロック/ロック解除とホームボタンの違いが不明なため、ブール値をどこに設定するかが不明です。また、とにかくこの方法で問題を解決したくありません。ハックに見え、問題を実際に理解していないからです。

前もって感謝します!

4

2 に答える 2

1

一般に、 の階層に対して常にビューを追加および削除する必要がある理由はありませんActivity。このコードを削除すると、アプリケーションの一貫性が向上します。

関心のあるビューは両方ともSurfaceViewコンポーネントであるため、ウィンドウが表示または非表示になったときに実行する必要があるアクションがある場合は、およびメソッドSurfaceHolder.Callbackを監視するためにを利用できます。onSurfaceCreated()onSurfaceDestroyed()

于 2012-07-12T20:51:24.287 に答える
0

この特定の状況 (2 つの surfaceView を使用し、ウィンドウ内で Z オーダーを指定する) は、現在 Android でサポートされていないようです。Android 開発者グループのこのスレッドでは、次の情報を共有しています。

複数のアクティブなオーバーラップ サーフェス ビューは、現在、フレームワークではサポートされていません。それらを機能させることもできますが、それはほとんど運によるものです。ビュー階層は、これらのサーフェスの Z オーダーを定義しておらず、特定の方法で Z オーダーになっていることを確認しようとしないため、これは何らかの理由で変更される可能性があります。理由。

ええと...そこに行きます!

...しかし、これを試みる人のために、回避策を見つけました。カメラのプレビュー サイズを小さな 1x1 の正方形にします。これにより、両方を同時に表示でき (プレビューを続行するにはカメラ プレビューが表示されている必要があるため)、cameraPreview が提示する厄介な SurfaceView の問題を無視できます。厳密に 1 つの GLSurfaceView を使用するより良い解決策があると思いますが、3.0 未満では互換性がありません。

于 2012-08-26T21:37:29.470 に答える