最近在学习自定 View 的内容,发现其实在 onDraw() 的时候可以对 Canvas 进行各种各样的操作,比如平移、旋转、缩放、倾斜当然还有切割画布和反向切割画布。下面就来根据实际操作介绍一下。
1.平移 translate
//先设置画笔
mPaint.setStrokeWidth(5);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setColor(Color.RED);
//平移
canvas.drawRect(0, 0, 500, 500, mPaint);
canvas.translate(50, 50);
mPaint.setColor(Color.YELLOW);
canvas.drawRect(0, 0, 500, 500, mPaint);
canvas.translate(-100, -100);
mPaint.setColor(Color.BLUE);
canvas.drawRect(0, 0, 500, 500, mPaint);
第一步就是先画一个矩形用来做参照,然后对画布进行一个平移操作 canvas.translate(50, 50); 第一个参数是 x 轴平移距离,第二个是 y 平移的距离,平移后我们设置一下画笔颜色然后再画一个矩形,效果如下图
2.缩放 scale
//缩放
canvas.drawRect(0, 0, 500, 500, mPaint);
canvas.scale(0.5f, 0.5f);
canvas.drawRect(0, 0, 500, 500, mPaint);
canvas.scale(1.5f, 1.5f);
canvas.drawRect(0, 0, 500, 500, mPaint);
缩放有一个重载的方法 canvas.scale(0.5f, 0.5f, 500, 500);
前面还是 x y 缩放的比列,后面的两个参数表示的是坐标点,保持哪个点不变然后开始缩放
保持右下角的点不变效果如下
3.旋转 rotate
//旋转
canvas.translate(400, 400);
canvas.drawRect(0, 0, 500, 500, mPaint);
canvas.rotate(45);
mPaint.setColor(Color.BLUE);
canvas.drawRect(0, 0, 500, 500, mPaint);
canvas.rotate(45,250,250);
mPaint.setColor(Color.GREEN);
canvas.drawRect(0, 0, 500, 500, mPaint);
旋转是按照角度旋转的,也有一个重载的方法表示你按照哪个点进行旋转。效果如下
第一次旋转后,第二次再设置表示在旋转的基础上再进行相应的操作
4.倾斜 skew
这个有两个参数 sx、sy 这些都是 float 类型
倾斜是根据 三角函数中的 正切函数tan(A)=a/b,就是说对边比邻边
1就是45度
//倾斜
canvas.drawRect(0, 0, 500, 500, mPaint);
canvas.skew(1, 0);//倾斜是按照 tan 1就是45度
mPaint.setColor(Color.BLUE);
canvas.drawRect(0, 0, 500, 500, mPaint);