void concat(Matrix matrix)
Preconcat the current matrix with the specified matrix.
可以理解成对matrix的变换应用到canvas上的所有对象。
参数Matrix是The Matrix class holds a 3x3 matrix for transforming coordinates.意思。可以理解成它是用来处理图形的,它是一个3*3的矩形。
如何使用:
需求:图片从坐标(20,20)开始画
关键代码:
matrix.setTranslate(20f,20f)//画布开始点坐标移到(20,20)
完整代码:
package com.lxm.apipro.canvas.d3
import android.content.Context
import android.graphics.*
import android.util.AttributeSet
import android.view.View
import com.lxm.apipro.R
class CanvasView : View {
private var mContext: Context? = null
private var mBitmap: Bitmap = BitmapFactory.decodeResource(resources, R.drawable.pic1)
private var mPaint: Paint? = null
constructor(context: Context?) : this(context, null)
constructor(context: Context?, attrs: AttributeSet?) : this(context, attrs, 0)
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
context,
attrs,
defStyleAttr
) {
mContext = context
mPaint = Paint()
mPaint?.isAntiAlias = true
}
override fun onDraw(canvas: Canvas?) {
super.onDraw(canvas)
//需求:图片从坐标(20,20)开始画
canvas?.save()
var matrix = Matrix()
matrix.setTranslate(20f,20f)//画布开始点坐标移到(20,20)
canvas?.concat(matrix)
canvas?.drawBitmap(mBitmap,0f,0f,null)
canvas?.restore()
}
}
效果:
未添加matrix.setTranslate(20f,20f)//画布开始点坐标移到(20,20)时效果:
添加matrix.setTranslate(20f,20f)//画布开始点坐标移到(20,20)时效果: