先定义一下画笔
然后学习平移操作
translate(sx,sy) ,
画布沿着X轴方向和y轴方向进行平移
缩放操作
scale(sx,sy) ,画布沿着x轴方向和y轴方向进行比例缩放 ,
scale(sx,sy,translateX,translateY)
这个方法执行了3行代码
translate(px, py);
scale(sx, sy);
translate(-px, -py);
练习代码如下
drawRect(200f,200f,400f,400f ,mPaint)
// 先translate (px,py),再scale(sx,sy) 再反向translate
scale(0.6f,0.6f,200f,200f)
画布右移200 下移200 然后画布缩小0.6f
再左移200*0.6 上移200*0.6
也就是80,80位置
然后画的时候的起点是200*.6 200*0.6 所以 相加之后起点是80+120,80+120
矩形缩放大小是0.6
*/ mPaint.color=Color.GRAY
drawRect(200f,200f,400f,400f,mPaint)
旋转操作
练习代码如下
// 3.旋转操作
// canvas?.run {
// drawRect(0f,0f,300f,300f ,mPaint)
// rotate(45f)//如果不指定旋转的点 就默认起始点坐标
//
// rotate(45f,150f,150f)//px px 表示旋转的中心点坐标
//
// mPaint.color=Color.GRAY
// drawRect(0f,0f,300f,300f ,mPaint)
// }
切割操作
练习代码如下
canvas?.run {
// drawRect(200f,200f,700f,700f,mPaint)
// mPaint.color=Color.GRAY
// drawRect(200f,800f ,700f,1300f,mPaint)
// clipRect(200f,200f,700f,700f)//裁剪了之后,想要再画图形 只有裁剪区域内的图形可以被显示
// clipOutRect(200f,200f,700f,700f)//裁剪了之后,想要再画图形 只有裁剪区域内的图形以外的区域可以被显示
// drawCircle(300f,300f,100f,mPaint)
// drawCircle(100f,100f,100f,mPaint)
//
//
// }
矩阵用法
练习代码如下
val matrix = Matrix()
// matrix.setTranslate(150f,150f)//平移
// matrix.setRotate(45f)//旋转
// matrix.setScale(0.5f,.5f)//缩放
// canvas?.run {
// drawRect(0f,00f,700f,700f,mPaint)
// setMatrix(matrix)
// mPaint.color=Color.GRAY
//
// drawRect(000f,0f,700f,700f,mPaint)
// }
save restore saveCount restoreToCount(saveCount)的用法
save 相当于压栈 保留当前画布和画笔属性
restore 是出栈
saveCount 获取当前入栈数
restoreToCount(saveCount1) 跳转到指定的某个save
当然这个save要实现定义好变量
restore的最小值是1 如果小于一会报异常
Underflow in restore - more restores than saves
val saveLayer = saveLayer(0f, 0f, 700f, 700f, mPaint)//离屏绘制
restoreToCount(saveLayer)//恢复到画布
练习代码如下
canvas?.run {
// Log.e("saveCount", "saveCount:$saveCount")
// drawRect(200f,200f,700f,700f,mPaint)
// val saveCount1 = save()
// save()
// Log.e("saveCount", "saveCount:$saveCount")
// translate(50f,50f)
// mPaint.color=Color.GRAY
// drawRect(200f,200f,700f,700f,mPaint)
// save()
// Log.e("saveCount", "saveCount:$saveCount")
// translate(100f,100f)
// mPaint.color=Color.BLUE
// drawRect(200f,200f,700f,700f,mPaint)
// restore()
// restoreToCount(saveCount1)
// drawLine(000f,00f,100f,100f,mPaint)
// Log.e("saveCount", "saveCount:$saveCount")
// drawLine(200f,200f,700f,700f,mPaint)
// restore()
// Log.e("saveCount", "saveCount:$saveCount")
// mPaint.color=Color.YELLOW
// drawLine(200f,200f,700f,700f,mPaint)
// restore()
drawRect(0f,0f,100f,100f,mPaint)
val saveLayer = saveLayer(0f, 0f, 700f, 700f, mPaint)//离屏绘制
mPaint.color=Color.BLUE
val matrix= Matrix()
matrix.setTranslate(100f,100f)
canvas.matrix=matrix
drawRect(0f,0f,100f,100f,mPaint)
restoreToCount(saveLayer)
mPaint.color=Color.BLACK
drawRect(200f,200f,400f,400f,mPaint)