2012-06-14 47 views
10

誰能告訴我SurfaceView和GLSurfaceView之間的基本區別是什麼?何時使用SurfaceView以及何時使用GLSurfaceView?Android中的SurfaceView和GLSurfaceView之間的區別

我讀了一些已經在stackoverflow中回答的問題,但沒有滿足我的疑問。

任何幫助,將不勝感激。

+0

看看這個鏈接:http://pierrchen.blogspot.jp/2014/04/android-ui-internal-glsurfaceview.html – pierrotlefou

回答

24

A GLSurfaceViewSurfaceView,您可以使用OpenGL進行渲染。選擇它們很簡單:

  • 如果您熟悉OpenGL並且需要它提供的內容,請使用GLSurfaceView
  • 否則,請使用SurfaceView

OpenGL是低級的。如果你不熟悉它,這是一個學習的承諾。如果您只需要2D繪圖,則SurfaceView使用高級別,合理高性能Canvas。與其合作非常容易。

除非您有充分的理由使用GLSurfaceView,否則您應該使用常規SurfaceView。我建議如果你不知道你需要GL,那麼你可能不需要。

+0

謝謝你的回答。對於相機,我有一個問題,哪一個會更好? – AndroDev

+2

@AndroDev你將不得不變得更具體。儘管對你的意思有所暗示:如果你想從相機中預覽實時圖像,你只需要一個'SurfaceView':http://developer.android.com/guide/topics/media/camera.html #custom-camera –

+1

請注意,可以將OpenGL與「SurfaceView」結合使用。使用'GLSurfaceView'來做它並不複雜。請參閱[圖形體系結構文檔](http://source.android.com/devices/graphics/architecture.html#glsurfaceview)。 – Lii

5

SurfaceView

AFAIK Canvas是實現簡單,有效的2D繪圖,但如果你想設計一些3D遊戲,然後3D繪圖不支持它

GLSurfaceView

你可以用GLSurfaceView和OGLES

我的經驗是,如果你只是想做2D processi ng,然後選擇Canvas,因爲它比GLSurfaceView更容易實現和有效。

+0

在的情況下, 2D處理,爲什麼Canvas是有效的? – AndroDev

+0

請注意,可以將OpenGL與「SurfaceView」結合使用。使用'GLSurfaceView'來做它並不複雜。請參閱[圖形體系結構文檔](http://source.android.com/devices/graphics/architecture.html#glsurfaceview)。 – Lii

6

GLSurfaceView是3D應用程序的主要構建模塊,因爲View適用於2D應用程序。它不僅在3D遊戲中被廣泛使用,而且還被廣泛用於照相機等多媒體應用中,以創建特殊的預覽效果。

GLSurfaceView擴展了SurfaceView,並且還擁有渲染線程和客戶端設置的渲染對象。渲染線程持續或按需運行,並委託渲染對象使用OpenGL API繪製幀。對於SurfaceView和GLSurfaceView,渲染都在主線程以外的單獨線程中執行。不同之處在於SurfaceView渲染線程由客戶端創建,而GLSurfaceView則由系統創建。更重要的是,GLSurfaceView將在內部處理主線程和呈現線程之間的同步。

如需更多信息,請查看thisthis