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