画像の描画に使用されているSurfaceView
があり、携帯電話のカメラからのライブフィードにそれらをオーバーレイしたいと思います。
現在、画像を含むSurfaceView
の背景は白ですが、携帯電話のカメラフィードにオーバーレイする場合、透明にする必要があります。カメラとアニメーションの描画を同じSurfaceView
で行うことはできません。
カメラの管理と画像の描画を含む複数のビューの使用を追求する最良のコースは何ですか? SurfaceView
を透明にすることは可能ですか?
私も拡張アプリケーションをやっていて、あなたが遭遇したのと同じ問題にぶつかります。正しい解決方法に関する情報はほとんどありません。しかし、mixareと呼ばれるフレームワークを見つけました-Android用のARアプリを作成できます。あなたは間違いなくそれを見るべきです source -それはかなり有望に見えます。これがあなたのお役に立てば幸いです。
次のアプローチで成功しました。
まず、次のようなレイアウトxmlファイルを作成します(2つのビューの順序に注意してください)。
<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent" Android:layout_height="fill_parent"
Android:orientation="vertical">
<com.yourcustom.OverlayView
Android:id="@+id/overlay" Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
</com.yourcustom.OverlayView>
<SurfaceView Android:id="@+id/surface"
Android:layout_width="fill_parent" Android:layout_height="fill_parent">
</SurfaceView>
</FrameLayout>
OverlayView
は、描画スレッドとアニメーションスレッドの実装を持つSurfaceView
のサブクラスです。もう1つのSurfaceViewは、カメラプレビューを処理するサーフェスになります。 onCreate
の内部では、次のようにビューを設定する必要があります。
mView = (OverlayView)this.findViewById(R.id.overlay);
mView.getHolder().setFormat(PixelFormat.TRANSLUCENT);
mSurfaceView = (SurfaceView)this.findViewById(R.id.surface);
mSurfaceHolder = mSurfaceView.getHolder();
mSurfaceHolder.addCallback(this);
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_Push_BUFFERS);
アニメーションスレッドを処理するSurfaceHolder
のmView
にSurfaceHolder.Callback
実装を追加する必要があります。サブクラス内でこれを実装し、アニメーション/描画スレッドを使用する例は、古いLunarLanderの例にあります: http://developer.Android.com/resources/samples/LunarLander/src/com/example/ Android/lunarlander/LunarView.html
それに加えて、この例と同じ方法でカメラSurfaceViewをセットアップします: http://developer.Android.com/resources/samples/ApiDemos/src/com/example/Android/apis/graphics/CameraPreview.html
MIGHT このコード help? `
ハンドセットを4.0.4にアップグレードすると、少し奇妙な余震が見つかりました。全画面カメラプレビューに半透明のgl全画面オーバーレイがあります。これは、以前のicsビルドで非常にうまく機能しました(4.0.3でしたが、確実ではありませんでした)。 4.0.4にアップグレードした後、プレビューは少し混乱しました。カメラ画像は、カメラ画像の明るい部分のいずれかでサイケデリックな色のプライマリエリアを表示しました(暗い部分は問題なく見えました)。最終的に、glclearcolourを0.5、0.5、0.5から0,0,0,0に変更することがわかりました。 0はそれを整理しました。
Glオーバーレイの未使用部分のアルファがゼロであったとしても、ブレンド機能はまだglの灰色の背景を考慮していたようです。