サンプルガイドを使用して、SurfaceViewクラスを継承し、カメラプレビューを表示するCameraPreviewというクラスを作成しました。また、Viewから直接継承するDrawOnTopという別のカスタムビュークラスを作成しました。これを使用して、プレビューの上にテキストやその他のアイテムを描画します。各ビュークラスはそれ自体で正常に機能しますが、両方のビューをアクティビティにロードすると、CameraPreviewが常に支配的であり、DrawOnTopクラスのオブジェクトやテキストはカメラプレビューの上に表示されません。
2つのカスタムビュークラスを使用しているため、アクティビティのonCreateでXMLからビュークラスを拡張する必要はありません。そのため、onCreateにはsetContentView(...)の呼び出しが含まれていません。代わりに、各ビュークラスをインスタンス化し、addContentView(...)を使用して各ビューオブジェクトをアクティビティのルートビューにロードします。
CameraPreview preview = new CameraPreview(this);
addContentView(preview, new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
DrawOnTop drawontop = new DrawOnTop(this);
addContentView(drawontop, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
drawontop.setVisibility(View.VISIBLE);
drawontop.bringToFront();
アクティビティのルートビューを確認したところ、FrameLayoutタイプであることがわかりました。上で述べたように、この方法論は、それ自体で各ビューに対して正常に機能します。
DrawOnTopクラスをカメラプレビューの上部に表示するために、bringToFront()を使用してみましたが、効果がありません。Androidバージョン4.1.1を実行しているSamsungGalaxyNote2LTEでアプリをテストしています。
誰かが私が間違っていることを教えてもらえますか?