绘图基础
Android系统提供了Canvas和Paint对象进行绘图,类似于现实生活中的画板和画笔。
Canvas提供了绘制各种图形的API,常用的有:
- drawPoint(); 绘制点
- drawLine(); 绘制线
- drawRect(); 绘制矩形
- drawRoundRect(); 绘制圆角矩形
- drawVertices(); 绘制多边形
- drawArc(); 绘制弧形和扇形
- drawCircle(); 绘制圆
- drawOval(); 绘制椭圆
- drawText(); 绘制文本
- drawColor(); 绘制颜色
- drawPath(); 绘制路径(可以用于绘制自定义图形)
- drawBitmap(); 绘制图像
Paint提供了各种绘制效果的API,常用的有:
- setAntiAlias(); 设置画笔的锯齿效果
- setColor(); 设置画笔的颜色
- setARGB(); 设置画笔的A R G B值
- setAlpha(); 设置画笔的透明度
- setTextSize(); 设置字体的尺寸
- setStyle(); 设置画笔的风格(实心或空心等)
- setStrokeWidth(); 设置画笔的宽度
具体绘制的时候,可以任意组合Canvas和Paint的API实现不同的绘制效果,比如绘制一个红色实心矩形。
Canvas高级使用
虽然通过Canvas的drawXXX()方法可以绘制各种图形,但是对于一些复杂的图形,会涉及到复杂的坐标运算,为了简化坐标运算,可以使用以下方法。
Canvas.save()和Canvas.restore()
save()的作用是将之前已绘制的图像保存起来,这样,后续绘制操作相当于在一个新的图层上进行;
restore()方法作用是将save()之后绘制的图像与save()之前绘制的图像进行合并,即将新的图层绘制到Canvas上;
这两个方法一般是配合使用;Canvas.translate()和Canvas.rotate()
translate(x, y)方法可以理解为将绘图的坐标原点(0, 0)移到(x, y),后续的绘图操作都以(x, y)为原点进行;
rotate()方法可以理解为将绘图的坐标系旋转一定的角度,后续的绘图操作都以旋转后的坐标系为参照进行,这样可以减少坐标计算,例如,在原坐标系中的斜线,在旋转后的坐标系中只需要绘制成直线;
Canvas还提供了clipXXX()方法对图像进行裁剪,比如clipRect()方法可以将绘制好的图像裁剪成为矩形。
Layer图层
一张复杂的图像可以由多个图层叠加形成,多个图层就形成了一个栈的结构,Android系统对图层的管理就是通过栈的结构进行的。
saveLayer()和saveLayerAlpha()方法将一个图层入栈;restore()和restoreToCount()方法将一个图层出栈。
入栈的时候,后面所有的绘制操作都发生在这个图层上;出栈的时候,会把图层上的图像绘制到Canvas上。
通过控制图层的位置、透明度等,可以绘制出各种复杂的图像。