Android ApiDemos示例解析:Graphics->Layers
来源:互联网 发布:电信为什么禁用80端口 编辑:程序博客网 时间:2024/06/05 19:35
Canvas 在一般的情况下可以看作是一张画布,所有的绘图操作如drawBitmap, drawCircle都发生在这张画布上,这张画板还定义了一些属性比如Matrix,颜色等等。
但是如果需要实现一些相对复杂的绘图操作,比如多层动画,地图(地图可以有多个地图层叠加而成,比如:政区层,道路层,兴趣点层)。
Canvas提供了图层(Layer)支持,缺省情况可以看作是只有一个图层Layer。如果需要按层次来绘图,Android的Canvas可以使用SaveLayerXXX, Restore 来创建一些中间层,对于这些Layer是按照“栈结构“来管理的:
创建一个新的Layer到“栈”中,可以使用saveLayer, savaLayerAlpha, 从“栈”中推出一个Layer,可以使用restore,restoreToCount。但Layer入栈时,后续的DrawXXX操作都发生在这个Layer上,而Layer退栈时,就会把本层绘制的图像“绘制”到上层或是Canvas上,在复制Layer到Canvas上时,可以指定Layer的透明度(Layer),这是在创建Layer时指定的:
public int saveLayerAlpha(RectF bounds, int alpha, int saveFlags)
本例Layers 介绍了图层的基本用法:Canvas可以看做是由两个图层(Layer)构成的,为了更好的说明问题,我们将代码稍微修改一下,缺省图层绘制一个红色的圆,在新的图层画一个蓝色的圆,新图层的透明度为0×88。
1
@Override
protected
void
onDraw(Canvas canvas) {
2
canvas.drawColor(Color.WHITE);
3
4
canvas.translate(
10
,
10
);
5
6
mPaint.setColor(Color.RED);
7
canvas.drawCircle(
75
,
75
,
75
, mPaint);
8
9
canvas.saveLayerAlpha(
0
,
0
,
200
,
200
,
0x88
, LAYER_FLAGS);
10
11
12
mPaint.setColor(Color.BLUE);
13
canvas.drawCircle(
125
,
125
,
75
, mPaint);
14
15
canvas.restore();
16
}
在调用canvas.saveLayerAlpha 创建一个新图层之后,后续的canvas.drawCircle 都会发生的这个新图层上, canvas.restore() 将这个新图层绘制的图像“复制”到Canvas的缺省图层上,透明度为0×88。
- Android ApiDemos示例解析:Graphics->Layers
- Android ApiDemos示例解析:Graphics->Layers
- Android ApiDemos示例解析(67):Graphics->Layers
- Android ApiDemos示例解析:Graphics->Layers
- Android ApiDemos示例解析(67):Graphics->Layers
- Android ApiDemos示例解析:Graphics->Layers
- Android ApiDemos示例解析(77):Graphics->RoundRects
- Android ApiDemos示例解析(55):Graphics->BitmapMesh
- Android ApiDemos示例解析(56):Graphics->BitmapPixels
- Android ApiDemos示例解析(51):Graphics->AlphaBitmap
- Android ApiDemos示例解析(52):Graphics->AnimateDrawables
- Android ApiDemos示例解析(53):Graphics->Arcs
- Android ApiDemos示例解析(54):Graphics->BitmapDecode
- Android ApiDemos示例解析(55):Graphics->BitmapMesh
- Android ApiDemos示例解析(56):Graphics->BitmapPixels
- Android ApiDemos示例解析(57):Graphics->CameraPreview
- Android ApiDemos示例解析(58):Graphics->Clipping
- Android ApiDemos示例解析(59):Graphics->ColorFilters
- Sigar获取CPU的基本信息、使用率
- cxGrid合计忽略重复记录
- Python线程编程学习
- 收集DOS 资料
- listView gridView 滚动 异步加载 连接备用
- Android ApiDemos示例解析:Graphics->Layers
- Discuz!X 插件制作教程(二) --管理中心
- <每日一句英语> 2012-10-17
- 1020. Big Integer
- Eclipse中10个最有用的快捷键组合
- 在ASP.NET中以(.ashx)为结尾对session的访问
- 隐藏当前窗口/守护进程
- WPF之MVVM中DataGrid中嵌入Combox,改变Combox可回传至绑定的实体
- 我在江北学安全(六) XSS-Scan系统原理图解分析 及 XSSer代码分析