4

我正在从 Suface、Suface Flinger、SurfaceView、SurfaceHolder 和 Bitmap 的文档中学习。我发现了以下定义:

Surface 表面是像素的集合。Surface 是一个对象,其中包含正在合成到屏幕的像素。你在屏幕上看到的每个窗口(一个对话框、你的全屏活动、状态栏)都有它自己绘制的表面,Surface Flinger 以正确的 Z 顺序将这些渲染到最终显示。一个表面通常有多个缓冲区(通常是两个)来进行双缓冲渲染:应用程序可以绘制它的下一个 UI 状态,而表面抛掷器正在使用最后一个缓冲区合成屏幕,而无需等待应用程序完成绘画。

SurfaceView 此类用于向用户呈现实时相机预览。SurfaceView 是 View 的一种特殊实现,它还创建自己的专用 Surface 供应用程序直接绘制(在普通视图层次结构之外,否则必须为窗口共享单个 Surface)

位图 位图是像素集合的包装器,它只是一个像素数组,具有一些其他方便的功能。

Canvas Canvas 是一个包含所有绘图方法的类。它类似于 Java 中 AWT/Swing 中的 Graphics 类。它具有关于如何绘制、框等的所有逻辑。画布在位图上运行。

但我不清楚SurfaceHolderSurfaceFlinger,根据上面的定义,位图也是像素和 Surface 的容器。

你能帮我清楚地理解所有这些对象的定义吗?

4

1 回答 1

2

Canvas 是使用图形 API 进行绘图的基本上下文。您可以创建自己的 Canvas 包装 Bitmap 以进行离屏绘图,当然 UI 框架会将 Canvas 传递给小部件,以便它们将自己绘制到其中。所有这些小部件都是 View 的子类。或者,如果它们可以包含其他小部件,则它们是 ViewGroup 的子类(ViewGroup 的子类)。

如果你想做高帧率动画,那么你需要从 SurfaceView 子类化(或者它的子类 GLSurfaceView,如果你想做屏幕上的 OpenGL-ES 渲染)。每个 SurfaceView 都有一个 SurfaceHolder,它具有 lockCanvas 方法,您可以随时调用这些方法来获取一个 Canvas,在该 Canvas 中绘制更新的显示并通过 unlockCanvasAndPost 回发给用户以立即查看。

有关详细信息,请参阅2D 图形概念自定义小部件提示

于 2012-05-17T10:31:55.933 回答