我正在学习从文件表面,表面燧石,表面视图,表面文件夹和位图。我发现了以下定义:
表面
曲面是像素的集合。曲面是一个包含正在合成到屏幕的像素的对象。您在屏幕上看到的每个窗口(对话框、全屏活动、状态栏)都有自己的绘制面,Surface Flinger会按正确的Z顺序将其渲染到最终显示。一个曲面通常有多个缓冲区(通常有两个)来进行双缓冲渲染:应用程序可以在Surface Flinger使用最后一个缓冲区合成屏幕时绘制其下一个UI状态,而无需等待应用程序完成绘制。
曲面视图
此类用于向用户呈现实时摄影机预览。
surface view是视图的一种特殊实现,它还创建了自己的专用表面,以便应用程序直接绘制(在普通视图层次结构之外,否则必须共享窗口的单个表面)
位图
位图是像素集合的包装器,它只是一个像素数组和一些其他方便的函数。
帆布
canvas是一个包含所有绘图方法的类。它类似于Java中的AWT/Swing图形类。它有关于如何绘制的所有逻辑,一个盒子等等。画布在位图上操作。
但我不清楚surfaceholder和surfaceflinger,根据上面的定义,位图也是像素和曲面的容器。
你能帮助我清楚地理解所有这些物体的定义吗?

最佳答案

画布是使用图形api进行绘图的基本上下文。您可以创建自己的画布来包装一个位图,以便进行屏幕外绘制,当然ui框架会将画布传递给小部件,让它们自己绘制。所有这些小部件都是视图的子类。或者,如果它们可以包含其他小部件,则它们从viewgroup(viewgroup是view的一个子类)派生。
如果你想做高帧率的动画,那么你需要从surfaceview(或者它的子类glsurfaceview,如果你想做屏幕上的opengl es渲染)中创建子类。每个surfaceview都有一个surfaceholder,其中有lockcanvas方法,您可以随时调用这些方法来获取一个画布,在其中绘制更新的显示,并通过unlockcanvasandpost发回,供用户立即查看。
有关更多信息,请参见2D graphics conceptsCustom widget tips

08-18 00:27