不说废话直接把知识点列出来
1,对canvas进行缩放后之前绘制的图形大小是不变的例如
canvas.drawCircle(0, 0, 56, paint);
canvas.scale(2.0f, 2.0f);
canvas.drawCircle(100, 100, 56, paint);
这段代码先绘制了一个56半径的圆,然后把画布放大两倍绘制第二个圆,绘制的结果第二个圆的半径是第一个圆的两倍
2,与缩放一样,将画布进行旋转之后再进行绘制,之前绘制的图形位置不会改变
canvas.save();
canvas.translate(width / 2, height / 2);
Paint paint = new Paint();
paint.setColor(Color.RED);
for (int i = 0; i <= 60; i++) {
canvas.drawLine(0, 50, 0, 50 + 2 * i, paint);
canvas.rotate(6);
}
canvas.restore();
上面的代码绘制的图形如下
3,画布的默认原点实在左上角的(0,0),建议绘制的时候将画布移动到控件的中央 代码如下
canvas.translate(width / 2, height / 2);
width 和 height分别是控件的宽高
4, Paint.setStrokeJoin(Join join)设置结合处的样子,
Miter:结合处为锐角,
Round:结合处为圆弧(这样画出来的 图形会比较圆滑)
BEVEL:结合处为直线
5, paint.setAntiAlias(true); //防锯齿(解决画出的图形边缘出现锯齿状的现象 默认是false的)
6,看别人博客发现的知识点,描述的很好
7,canvas.skew(1, 0.5f);使画布倾斜 (第一个参数是x方向倾斜的角度的tan值,第二个是y方向的角度的tan值,) 例:
canvas.skew(1, 0) //在x方向上倾斜45度
canvas.skew(0, 1) //在y方向上倾斜45度
canvas.save();
canvas.translate(width / 2, height / 2);
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setStrokeWidth(5);
// paint.setStrokeJoin(Paint.Join.ROUND);
// paint.setStrokeCap(Paint.Cap.ROUND);
paint.setColor(Color.RED);
paint.setStrokeMiter(50);
canvas.skew(1, 0.5f);//关键代码,使画布倾斜
for (int i = 0; i <= 60; i++) {
canvas.drawLine(0, 50, 0, 50 + 2 * i, paint);
canvas.rotate(6);
}
canvas.restore();
上面代码实现的效果如下