通过Shader绘制一张图片我们需要记住,Shader永远是按照原点进行h绘制的.比如下面这个例子:
class SS : View {
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs){
initPaint()
}
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
canvas.drawRect(0f, 0f, paintWidth.toFloat(), paintWidth.toFloat(), mPaint)
}
var mPaint = Paint()
var paintWidth = 140
fun initPaint() {
var bitmap =
Bitmap.createBitmap(paintWidth, paintWidth, Bitmap.Config.ARGB_8888);
var c2 = Canvas(bitmap);
var p2 = Paint(Paint.ANTI_ALIAS_FLAG);
p2.color = resources.getColor(R.color.purple_500)
c2.drawCircle(paintWidth / 2f, paintWidth / 2f, paintWidth / 2f, p2)
var shader = BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP)
mPaint.shader = shader
}
}
我们在onDraw里面调用drawRect绘制了一个矩形.起始点是0,0.结果就是你在左上角看到了一个圆形.
现在改下onDraw里面的代码:
canvas.drawRect(40f, 40f, 40+paintWidth.toFloat(), 40+paintWidth.toFloat(), mPaint)
可以看到是一个畸形的存在.
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
var m = Matrix()
mPaint.shader.getLocalMatrix(m)
m.setTranslate(
40f,
40f
)
mPaint.shader.setLocalMatrix(m)
canvas.drawRect(40f, 40f, 40+paintWidth.toFloat(),40+ paintWidth.toFloat(), mPaint)
}