我正在嘗試爲Android構建增強現實應用程序,並遇到了分層表面視圖的問題。我需要一個表面視圖來顯示將疊加圖形的相機預覽,並且我需要一個表面視圖來繪製圖形。第二個表面還需要在相機預覽之上繪製,但具有透明背景。在我目前的實現中,我有兩個表面視圖按照它們應有的方式工作並顯示,但背景不透明,因此沒有第二個表面視圖的外觀,並且將圖形繪製疊加在相機預覽表面視圖上。這怎麼可能實現?在搜索大量堆棧溢出問題以及其他論壇時,我遇到了許多與此事有關的意見衝突。有人說在Android中分層表面視圖是不可能的,而另外一些人說它是使用不同的佈局(FrameLayout與LinearLayout?)的問題。具體來說,我的實現包括兩個視圖:一個類,一個擴展SurfaceView的CustomCameraView,一個類,CustomDrawView,它還擴展了包含在FrameLayout中的SurfaceView,並在CustomCameraView之後出現了CustomDrawView。這些如何分層,以使CustomDrawView看起來疊加在CustomCameraView上?Android中的FrameLayout中的分層SurfaceViews
5
A
回答
7
我想很多人都試過這個。 Google Enginee明確指出(here),您應該避免堆疊表面視圖。即使有人發現了一些竅門,它可能不兼容,並會導致問題。
我覺得這給了三個選項,根據您的要求:
- 期(縣)的頂面觀
使用表面查看您的相機預覽和堆頂視圖的。這種方法的缺點是,在「正常」視圖a)上繪圖較慢,並且b)在UI線程中發生。你可以繞過b)如果你自己實現線程。但通常情況下,如果您的疊加層包含UI元素或幾個不需要經常更新的Drawable等東西,那可能就是這樣。
- 盡一切的SurfaceView
這將使運行時喲更好的性能和更小的開銷。你只有一個SurfaceView。在SurfaceView上合成疊加層,並在那裏繪製所有內容。當然,你可以把兩種方法結合起來。
- 盡一切在GLSurfaceView
這可能是去真正的性能的方式。像上面一樣,但在GLSurfaceView中將相機視圖渲染爲OpenGL紋理。
2
我使用下面的方法有攝像頭的上面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
型。後面兩個視圖的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. 更改MediaPlayer的SurfaceViews
- 3. 中的FrameLayout
- 4. FrameLayout中的SlidingDrawer
- 5. 在Android中使用FrameLayout
- 6. FrameLayout中的Android按鈕佈局
- 7. AnimationDrawable在SurfaceView旁邊的framelayout中 - Android
- 8. 在java中的Android窗口分層
- 9. Android WebView中的Flash - 分層問題
- 10. Android Studio中的分層對象
- 11. sklearn中的分層分類
- 12. Android的 - 對齊中心的RelativeLayout中的FrameLayout
- 13. Android充氣tabcontent內的framelayout
- 14. 處理兩個surfaceViews
- 15. Android分層ListView
- 16. 在導航抽屜中使用Framelayout Android
- 17. Android Custom Compoent在代碼中擴展FrameLayout
- 18. Android:在FrameLayout中製作填充動態
- 19. FrameLayout中的layout_gravity錯誤
- 20. RelativeLayout中的FrameLayout不顯示
- 21. Set Background - Framelayout中的圖片
- 22. Double ListView在FrameLayout Android
- 23. 集進度中的WebView中的FrameLayout
- 24. 如何在Android中獲取FrameLayout中播放的視頻照片?
- 25. 問題當兩個SurfaceViews在Android的Kitlay相對佈局中創建
- 26. 在Android中分層兩種形狀
- 27. StringTemplate中的分層數據
- 28. WEKA中的分層採樣
- 29. PostgreSQL中的分層和
- 30. IE8中的分層背景
你介意發佈你的視圖的XML代碼,也許快速的屏幕?然後有些人可以測試和理解。 –