我正在学习Suface文档,Suface Flinger,SurfaceView,SurfaceHolder和Bitmap。我找到了以下定义:
表面 Surface是像素的集合。 Surface是一个对象,用于保存与屏幕合成的像素。您在屏幕上看到的每个窗口(对话框,全屏活动,状态栏)都有自己的绘图表面,而Surface Flinger会以正确的Z顺序将这些窗口渲染到最终显示。表面通常具有多个缓冲区(通常为两个)以进行双缓冲渲染:应用程序可以绘制其下一个UI状态,而表面抛光器使用最后一个缓冲区合成屏幕,而无需等待应用程序完成图。
SurfaceView 该类用于向用户呈现实时相机预览。 SurfaceView是View的一个特殊实现,它还为应用程序创建自己的专用Surface,以便直接绘制(在普通视图层次结构之外,否则必须共享窗口的单个Surface)
位图 Bitmap是一个像素集合的包装器,它只是一个像素数组,带有一些其他方便的函数。
帆布 Canvas是一个包含所有绘图方法的类。它类似于Java中的AWT / Swing中的Graphics类。它具有如何绘制的所有逻辑,框等。画布在Bitmap上运行。
但我不清楚 SurfaceHolder 和 SurfaceFlinger ,根据上面的定义,位图也是像素和Surface的容器。
你能帮我清楚地理解所有这些物体的定义吗?
答案 0 :(得分:2)
Canvas是使用图形API进行绘图的基本上下文。您可以创建自己的Canvas包装Bitmap以进行离屏绘制,当然UI框架会将Canvases传递给小部件,以便他们自己绘制。所有这些小部件都是View的子类。或者,如果它们可以包含其他小部件,那么它们是ViewGroup的子类(它是View的子类)。
如果你想做高帧率动画,那么你需要从SurfaceView(或其子类GLSurfaceView,如果你想在屏幕上进行OpenGL-ES渲染)中继承子类。每个SurfaceView都有一个SurfaceHolder,它具有lockCanvas方法,您可以随时调用这些方法来获取Canvas,在其中绘制更新的显示并回发以供用户立即通过unlockCanvasAndPost查看。
有关详细信息,请参阅2D graphics concepts和Custom widget tips