【问题标题】:Surface Flinger,SurfaceView,Surface,SurfaceHolder and Bitmap is AndroidSurface Flinger、SurfaceView、Surface、SurfaceHolder 和 Bitmap 是 Android
【发布时间】:2012-05-24 19:52:33
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: android surfaceview


    【解决方案1】:

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

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

    有关详细信息,请参阅2D graphics conceptsCustom widget tips

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-19
      • 1970-01-01
      • 2011-03-23
      相关资源
      最近更新 更多