2D绘图

绘图基础

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上。

通过控制图层的位置、透明度等,可以绘制出各种复杂的图像。

坚持原创技术分享,您的支持将鼓励我继续创作!