前言
上一篇再讲Draw源码时,会传入一个Canvas对象,那么这篇文章我们要来分析Draw和Canvas还有Paint到底有何联系。
1.Canvas和Paint的关系
其实Canvas在我们的绘制中扮演的角色其实是会话(中间传达者),我们通常情况下都能够知道我们能使用Canvas去画圆形、矩形等等,但是最终真正的绘制并不是android层面进行,而是Native层。由此我们可以得出Canvas并不是真正的执行者,而是一个传达者,在Canvas当中我们会将所有的参数信息设置好,然后交由底层去绘制。
而在我们具体绘制的时候,都需要得到一个Paint参数:
public void drawArc(@NonNull RectF oval, float startAngle, float sweepAngle, boolean useCenter,
@NonNull Paint paint) {
super.drawArc(oval, startAngle, sweepAngle, useCenter, paint);
}
这个时候就会有疑问:Paint到底负责什么?
当我们打开Paint之后,看到最上面有一句这样的注释:
/**
* The Paint class holds the style and color information about how to draw(这个Paint类保存关于如何绘制的样式和颜色信息)
* geometries, text and bitmaps.(几何、文本和位图。)
*/
public class Paint {
可以看到这个翻译出来之后就很明显了,这个类实际上就是保存色彩与样式信息。
那么结合之前我们可以得出这样一个结论:
我们在绘制图形的时候,Canvas决定了图形的位置、形状等特性,而Paint决定了色彩和样式。
通俗一点来说:Canvas决定了一个人的高矮胖瘦,Paint决定了这个人的衣着、打扮。