在Android中,SurfaceView和GLSurfaceView有什么区别?

21

有谁能告诉我SurfaceView和GLSurfaceView之间的基本区别是什么?什么情况下应该使用SurfaceView,什么情况下应该使用GLSurfaceView?

我在Stack Overflow上阅读了一些已经回答的问题,但它们没有满足我的疑问。

任何帮助都将不胜感激。


请查看此链接:http://pierrchen.blogspot.jp/2014/04/android-ui-internal-glsurfaceview.html - pierrotlefou
3个回答

37

GLSurfaceView是一个可以使用OpenGL进行渲染的SurfaceView。如何选择它们很简单:

  • 如果您熟悉OpenGL并需要它提供的功能,请使用GLSurfaceView
  • 否则,请使用SurfaceView

OpenGL是底层的,如果您不熟悉它,学习它会是一项任务。如果您只需要2D绘图,则SurfaceView使用高级别、性能相对较高的Canvas。 它非常易于使用。

除非您有充分的理由使用GLSurfaceView,否则应该使用普通的SurfaceView。我建议如果您不知道自己是否需要GL,则可能不需要。


谢谢您的回答。我有一个问题...对于相机来说,哪一个更好? - AndroDev
2
@AndroDev 你需要更加具体地说明。不过,根据我的理解:如果你想要展示来自相机的实时图像预览,你只需要使用一个 SurfaceView:http://developer.android.com/guide/topics/media/camera.html#custom-camera - Darshan Rivka Whittle
3
请注意,使用SurfaceView可以与OpenGL一起使用。但是使用GLSurfaceView会更加简单易行。请参阅图形架构文档 - Lii
这是一个相当糟糕的答案。请查看@pierrotlefou的答案。 - frankelot

15

GLSurfaceView是3D应用程序的主要构建模块,就像View是2D应用程序的一样。它不仅广泛用于3D游戏中,还用于多媒体应用程序(如相机)以创建特殊的预览效果。

GLSurfaceView扩展自SurfaceView,并附带由客户端设置的渲染线程和渲染对象。渲染线程持续运行,连续或按需运行,并委托给渲染对象使用OpenGL API绘制帧。对于SurfaceView和GLSurfaceView,渲染都在与主线程不同的单独线程中执行。区别在于,SurfaceView的渲染线程由客户端创建,而GLSurfaceView的渲染线程由系统创建。此外,GLSurfaceView将在内部处理主线程和渲染线程之间的同步。

更多信息,请查看这个这个


6

SurfaceView

据我所知,Canvas 在 2D 绘图方面实现简单且有效,但不支持 3D 绘图。

GLSurfaceView

如果你想设计一些 3D 游戏,那么你应该选择 GLSurfaceView 和 OGLES。

从我的经验来看,如果你只是想进行 2D 处理,那么选择 Canvas 更容易实现并且比 GLSurfaceView 更有效。


在二维处理的情况下,Canvas为什么是有效的? - AndroDev
1
请注意,可以使用OpenGL与SurfaceView一起使用。但是,使用GLSurfaceView更不复杂。请参阅图形架构文档 - Lii

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接