以前也会用
Canvas
,但是每次用到的时候还得去查坐标含义,比如drawArc的left、top、right、bottom,startAngle,sweepAngle
,重新复习一遍,灵魂画手方式记录心得~
Canvas坐标系
Canvas
坐标系是视图坐标系,默认原点为parent
的left,top
,但是Canvas中的translation
方法可以指定原点
Canvas中缩放,反转操作的缩放中心都是由translation
方法指定的,如果不指定,则缩放中心为默认原点。
Canvas.scale()
:参数为1时,大小不变,负数则根据缩放中心反转方向。
执行指定原点、旋转或者缩放操作需要在Canvas.drawXxx();方法之前执行才会在此次绘制中发挥作用。
drawCircle
drawCircle
没什么难的,需要的参数为圆心和半径r。
drawArc
drawArc
参数为
- left、top、right、bottom
这四个参数可以确定一个Rect
-startAngle、sweepAngle
起始角度与滑过角度
左上、右下确定一个Rect
Android
坐标系x方向为drawArc
0度方向,角度以顺时针为正方向
归类到数学象限
第四象限为0-90
第三象限为90-180
第二象限为180-270
第四象限为270-360
逆时针
第一象限为0
- -90
依次类推
图中1为起始角度0
度
图中2为滑过角度90
度
drawOval
drawOval
参数也是根据left,top,right,bottom
确定一个Rect
每条边的切点相连组成Oval
通过drawOval
只能画横竖的椭圆,如果想要画斜的就得配合几何变换,例如
canvas.translate(600,600);
canvas.rotate(120);
canvas.drawOval(0,0,200,100,paint);
Canvas
.将原点移动至oval left,top
坐标处,再进行旋转,因为是相对与原点来旋转的,所以将原点设置为Rect
左上角,旋转比较方便。
确定Oval的left top right bottom实际的坐标为: (600,600,800,700);
Path
Path lineTo
方法效果上跟drawLine(0,0,x,y);
是相同的。
Path rLineTo
方法其实是drawLine(0,0,x,y); canvas.translation(x,y);
的结合体,不过只限于当前Path
中
path
使用过程中如果需要canvas.translation()
,必须新建一个Path
,因为当前path
还没有draw
,所以会整体移动。