Android用の拡張現実感アプリケーションを作成しようとしていて、レイヤー表示の問題を抱えています。私はグラフィックをオーバーレイするカメラのプレビューを表示するためにサーフェイスビューが必要です。グラフィックを描画するためにはサーフェイスビューが必要です。この第2の面は、カメラプレビューの上に描かれる必要があるが、背景が透明である必要がある。私の現在の実装では、両方のサーフェスビューが動作しているように見えますが、背景は透明ではないため、グラフィックスをカメラプレビューサーフェスビューに重ねて描いた2番目のサーフェスビューはありません。どのようにこれを達成することができますか?多数のスタックオーバーフローに関する質問だけでなく、他のフォーラムを検索する際に、私はこの問題に関する多くの矛盾する意見に出くわしました。 Androidのレイヤーサーフェイスビューは不可能だと言われていますが、別のレイアウト(FrameLayout vs. LinearLayout?)を使用する問題があると言う人もいます。具体的には、SurfaceViewを拡張するクラス、CustomCameraView、クラスCustomDrawViewは、CustomCameraViewの後に現れるCustomDrawViewでFrameLayoutに含まれるSurfaceViewも拡張します。 CustomDrawViewがCustomCameraViewにスーパーインポーズされるように、これらをどのようにレイヤーにすることができますか?AndroidのFrameLayoutにレイヤーされたSurfaceViews
答えて
私は多くの人がこれを試したと思います。 Google Engineeは、表面ビューの積み重ねを避ける必要があることを明確に示しました(here)。たとえ誰かがそれをするためにいくつかのトリックを見つけたとしても、それはおそらく互換性がなく、問題につながるでしょう。
私はあなたの要件に応じて、これは3つのオプションを与えると思う:
- ビュー(s)は表面図の上に
カメラのプレビューのための表面図を使用し、上にビューを積み重ねますそれの。このアプローチの欠点は、「通常の」ビューa)の描画が遅く、b)UIスレッドで発生することです。自分でスレッドを実装する場合は、b)を回避することができます。しかし、一般的には、オーバーレイにUI要素やDrawableのようなものが含まれていて、あまり頻繁に更新する必要がない場合は、おそらくその方法でしょう。
- これは、実行中のヨーヨーパフォーマンスが向上し、より少ないオーバーヘッドを与えるSurfaceView
に全力を尽くします。 SurfaceViewは1つしかありません。あなたのSurfaceView上のオーバーレイを合成し、そこにすべてを描画します。もちろん、両方のアプローチを組み合わせることもできます。
- これはおそらく、実際のパフォーマンスのために行くための方法ですGLSurfaceView
に全力を尽くします。上記と同様ですが、GLSurfaceViewのOpenGLテクスチャにカメラビューをレンダリングします。
私は、次のアプローチを使用して、カメラのSurfaceView上記2件の透明景色持つこの作業を得た:
を私の活動はonCreate()
方法でそのすべてのビューを設定し、私はそのための任意のレイアウトファイルのない使用をしません。これは次のようになります。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(null); //savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
cameraPreview = new CameraPreview(this);
addContentView(cameraPreview, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
animationView = new AnimationView(this);
addContentView(animationView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
crosslinesView = new CrosslinesView(this);
addContentView(crosslinesView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
}
cameraPreview
はタイプSurfaceView
、animationView
であり、crosslinesViews
はタイプView
です。後者の2つのビューのonDraw()
は、次のようになります。
protected void onDraw(Canvas canvas) {
// Have the view being transparent
canvas.drawARGB(0, 0, 0, 0);
// Your drawing code goes here
// ...
}
幸運を祈る!
- 1. セキュリティで保護されたレイヤーを備えたAndroidスクリーンレコード
- 2. AndroidのJniレイヤー
- 3. FrameLayoutにプログラムで追加した後に表示されない
- 4. Android FrameLayoutのチェックイン方法は既に表示されていますか?
- 5. FrameLayoutでのAndroidのドラッグとスケーリング
- 6. ケラスで結合されたレイヤーのトレーニング
- 7. レイヤーがレイヤーされていません
- 8. FrameLayoutとScrollViewを使用したAndroidでのレイアウトの問題
- 9. geom_histogramにオーバーレイされたgeom_pointレイヤーにgeom_text/annotateレイヤーを追加します
- 10. FrameLayoutがテキストビューで表示されない
- 11. FrameLayoutの動的に作成されたTextViewに幅がありません
- 12. FrameLayoutで自動生成されたフラグメントレイアウトxml
- 13. FrameLayoutの右にLinearLayout
- 14. Androidのクリック可能なレイヤー
- 15. 複数のレイヤーandroidアニメーション
- 16. Android TransitionDrawable現在表示されているレイヤー
- 17. FrameLayoutがAppBarLayoutの下に設定されていません
- 18. キーパッドがFramelayoutに表示されたときにスクロールしません
- 19. 角を丸めたFrameLayout
- 20. framelayoutを使用したナビゲーションドロワー
- 21. FrameLayoutを使用したScrollView
- 22. 畳み込みネットワーク:完全に接続されたレイヤーのドロップアウト
- 23. インポートされたレイヤーをブラウザウィンドウのサイズに合わせる
- 24. Android - FrameLayoutの幅を動的に設定する
- 25. Android FrameLayoutは他の画像にオーバーレイします
- 26. FrameLayout内のSlidingDrawer
- 27. framelayoutのスクロール
- 28. FrameLayoutのScrollView
- 29. DrawerLayout内のFrameLayout
- 30. Openlayers - ol.source.Zoomifyベースのレイヤーが別のレイヤーの上に表示されない
あなたのビューのXMLコードを投稿するのも気になるでしょうか?クイック画面ですか?その後、いくつかの人々がテスト&理解することができました。 –