这张图形系统构架图是用手机从书上拍下来的。以这张图为主线,咱们从下到上介绍各个模块。
SurfaceFlinger
•SurfaceFlinger 是Android multimedia 的一个部分,在Android 的实现中它是一个service ,提供系统范围内的surface composer 功能,它能够将各种应用程序的2D 、3D surface 进行组合。
•在实际中对这些Surface 进行merge 可以采用两种方式,一种就是采用软件的形式来merge ,还一种就是采用硬件的方式,软件的方式就是我们的SurfaceFlinger(调用OpenGL) ,而硬件的方式就是Overlay 。
•SurfaceFlinger采用C/S结构,服务端负责Surface的合成等处理工作,客户端提供接口给上层操作自己的Surface,并向服务端发送消息完成实际处理工作。
Layer
•每个Surface都位于某个特定的Layer,不同的Layer有不同的特性,Android在Surface的操作实现中采用LayerBase来处理共同的操作,下面再派生不同的类。
•Android 提供了 4 种类型的 layer 供选择,每个 layer 对应一种类型的窗口,并对应这种窗口相应的操作: Layer , LayerBlur , LayerBuffer , LayerDim 。
•普通Layer 是 Android 种使用最多的一种 Layer,它为每个 Surface 分配两个 buffer : front buffer 和 back buffer ,使用flip机制。
•LayerBuffer 不具备 render buffer ,主要用在 camera preview / video playback 上。它提供了两种实现方式,一种是 post buffer ,另外一种是overlay 。不管是 overlay 还是 post buffer 都是指这个 layer 的数据来源自其他地方,只是 post buffer 是通过软件的方式最后还是将这个 layer merge 到主的 FB ,而 overlay 则是通过硬件 merge 的方式来实现。
LayerDim会将下面的Layer变暗,在弹出对话框时经常使用,LayerBlur会将下面的层模糊处理,很少使用。
这是Merge服务的处理流程,它计算了更新区域,保证绘制工作最小化,而且也使用了flip机制,以保证屏幕不会闪烁。
SurfaceFlinger模块主要在窗口管理服务模块中使用,给应用程序提供绘制表面。而绘图操作主要由skia模块提供,下面重点介绍。
基本画图功能
•四大要素:
–Bitmap(hold the pixels)
–Canvas(host the draw calls and the state of the target)
–drawing primitive (e.g. Rect, Path, text, Bitmap)
–Paint(to describe the colors and styles for the drawing)
Bitmap
•支持格式(PNG、JPG、RAW)
•支持色彩(ALPHA_8、ARGB_4444 、ARGB_8888 、RGB_565 )
•BitmapFactory.Options(share、dither、bounds等)
•Purgeable
•Immutable
•Density(getScaledHeight)
•recycle
Canvas
注意:
Matrix
Density
DrawFilter(PaintFlagsDrawFilter)临时修改paint样式
Clip
Save、SaveLayer
quickReject(EdgeType)
PorterDuff.Mode
Drawing primitives
•位图、图形、文本
•常见类型(点、线、方、圆)
•Path
•Picture
•NinePatch
•drawable
Paint
•注意
–Style(Fill, Stroke, Both)
–Flags(FILTER_BITMAP_FLAG, ANTI_ALIAS_FLAG, DITHER_FLAG)
–Stroke(Cap, Join, Width, Miter, PathEffect)
–Shader(BitmapShader, ComposeShader, LinearGradient, RadialGradient, SweepGradient )
–ColorFilter(ColorMatrixColorFilter, LightingColorFilter, PorterDuffColorFilter)
–MaskFilter(BlurMaskFilter, EmbossMaskFilter)
–Xfermode(AvoidXfermode, PixelXorXfermode, PorterDuffXfermode )
–ShadowLayer
–Fill(Shader->mask(3d)->Color)
–Rasterizer(LayerRasterizer) The raster controls/modifies how paths/text are turned into alpha masks
Drawable概念
•A Drawable is a general abstraction for "something that can be drawn.“
•The setBounds(Rect) method must be called to tell the Drawable where it is drawn and how large it should be. All Drawables should respect the requested size, often simply by scaling their imagery. A client can find the preferred size for some Drawables with the getIntrinsicHeight() and getIntrinsicWidth() methods.
•The getPadding(Rect) method can return from some Drawables information about how to frame content that is placed inside of them. For example, a Drawable that is intended to be the frame for a button widget would need to return padding that correctly places the label inside of itself.
•The setState(int[]) method allows the client to tell the Drawable in which state it is to be drawn, such as "focused", "selected", etc. Some drawables may modify their imagery based on the selected state.
•The setLevel(int) method allows the client to supply a single continuous controller that can modify the Drawable is displayed, such as a battery level or progress level. Some drawables may modify their imagery based on the current level.
•A Drawable can perform animations by calling back to its client through the Drawable.Callback interface. All clients should support this interface (via setCallback(Drawable.Callback)) so that animations will work. A simple way to do this is through the system facilities such as setBackgroundDrawable(Drawable) and ImageView.
•支持XML
各种Drawable
•Bitmap: the simplest Drawable, a PNG or JPEG image.
•Nine Patch: an extension to the PNG format allows it to specify information about how to stretch it and place things inside of it.
•Shape: contains simple drawing commands instead of a raw bitmap, allowing it to resize better in some cases. (ShaderFactory )
•Layers: a compound drawable, which draws multiple underlying drawables on top of each other.
•States: a compound drawable that selects one of a set of drawables based on its state.
•Levels: a compound drawable that selects one of a set of drawables based on its level.
•Scale: a compound drawable with a single child drawable, whose overall size is modified based on the current level.
Drawable Mutations
•A Drawable is a pluggable drawing container that is usually associated with a View.
•there are about 700 drawables used in the core Android framework.
•Drawable.ConstantState
•mutate
animations
•Frame Animation vs Tween Animation
•AnimationDrawable + ImageView
•android.view.animation
•interpolator
相关推荐
总之,Android图形系统通过GDI和SurfaceFlinger为应用程序提供了一种机制,使得应用程序能够在不同的显示设备上输出图形界面,而无需关心底层硬件的具体实现细节。通过抽象出来的设备无关的操作,程序员可以专注于...
标题中提到的“Android图形系统与推荐系统实战分析”,暗示了本次沙龙活动将围绕Android平台的图形处理与推荐系统技术进行深入探讨。Android作为一个广受欢迎的移动操作系统,其图形系统负责处理屏幕上的视觉渲染,...
### Android图形系统的分析与移植 #### 1. 引言 Android作为一个全面、开放且免费的移动操作系统平台,自发布以来一直是业界关注的焦点。它以其出色的可移植性及强大的功能,在嵌入式设备领域展现出强劲的发展势头...
### Android 图形系统的...通过以上分析可以看出,Android图形系统的设计充分考虑了性能和效率的需求,利用Skia和OpenGL/ES等库实现了高效的图形处理能力。这对于提升用户体验、推动Android平台的发展具有重要意义。
Android图形系统编程主要涉及到的是如何在Android平台上使用OpenGL进行3D图形渲染和游戏开发。OpenGL是一种跨语言、跨平台的编程接口,用于渲染2D、3D矢量图形。在Android中,通常使用OpenGL ES(Embedded Systems...
### Android图形系统及GPU加速分析 #### 一、Android图形系统简介 Android图形系统是确保移动设备具有流畅、精致的图形用户界面的核心组件之一。在移动操作系统领域内,优秀的图形性能不仅提升了用户体验,也是...
Android 图形系统分析 - SurfaceFlinger 流程 Android 图形系统分析 Android 图形系统是 Android 操作系统中负责图形输出和管理的子系统。它主要由 SurfaceFlinger、Canvas、Layer、NativeBuffer 等组件组成。这些...
Android图形系统基于层叠窗口模型,其中每个窗口都可以有自己的图形内容。主要由View和Surface组件构成,View用于绘制用户界面,Surface则作为显示内容的缓冲区。Android支持多种图形API,如Canvas、OpenGL ES、 ...
本教程“Android图形开发实例”旨在帮助开发者深入理解和掌握Android图形系统,提升应用程序的视觉表现和用户体验。 一、Android图形系统基础 Android的图形系统主要基于OpenGL ES,一个为嵌入式设备设计的2D和3D...
Android图形系统采用Client/Server架构,其中SurfaceFlinger是核心服务,负责合成多个Surface,并根据Z顺序将它们组合在一起。Surface在Android中扮演着关键角色,为显示提供了一个接口,允许不同程序在其上进行绘制...
6.4.2 Android图形系统的JNI接口 124 6.4.3 Android的图形包(graphics) 125 6.5 Android的OpenGL系统与3D图形系统 125 6.5.1 OpenGL的本地代码 125 6.5.2 OpenGL的JNI代码 130 6.5.3 OpenGL的Java类 ...
首先,Android中的图形绘制主要依赖于`Canvas`类,它是Android图形系统的核心组成部分。`Canvas`提供了多种方法来在屏幕上绘制图形,如`drawRect()`, `drawCircle()`, `drawLine()`等。这些方法接受Paint对象作为...
《AndroidBook_图形架构师_V2.0 高焕堂》是一本专注于Android图形系统与架构设计的专业书籍,由知名专家高焕堂编著。该书深入探讨了Android平台下的图形处理、多线程模型、JNI技术、框架设计以及进程间通信等方面的...
要达到这一目的,开发者需要掌握Android图形系统的底层工作原理,并在实际开发中运用上述提到的技术和策略。通过对绘图命令的合理安排、绘制状态的优化管理、多线程技术的应用,以及兼容性和资源使用的精心考虑,...
2. `Path`:在Android图形系统中,`Path`对象用于描述二维路径。用户在屏幕上的每一个触控点都会添加到这个路径中,形成完整的解锁图形。 3. `Matrix`:这是一个用于处理几何变换的类,用于在将用户画出的路径转换...