android绘图中使用的矩阵是3x3的结构。
矩阵元素的功能:
先挑与平移有关的看。观察矩阵元素功能可知,如果绘制的图形平移到[x, y], 则只需要修改矩阵右上角的2个元素就可以了。
编写一个继承了view的TransView来验证,以下是onDraw()方法。
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint paint = new Paint(); paint.setColor(Color.RED); //在点(50,50)绘制半径为5的红色正圆 canvas.drawCircle(50, 50, 5, paint); //在点(200,200)绘制半径为15的红色正圆 canvas.drawCircle(200, 200, 15, paint); Matrix matrix = new Matrix(); //与 matrix.setTranslate(200, 200)等价 { float[] values = { 1, 0, 200, 0, 1, 200, 0, 0, 1 }; matrix.setValues(values); } Log.i("TransView", "" + matrix.toString()); canvas.save(); //画布在x轴移动200,y轴移动200后绘制半径为10的黑色正圆 canvas.setMatrix(matrix); paint.setColor(Color.BLACK); canvas.drawCircle(0, 0, 10, paint); canvas.restore(); }
效果图:
从log看也可以验证之前的结论。
但从效果图中看,通过matrix绘制的图形坐标有偏移,比起直接在坐标(200, 200)绘制的正圆,y坐标小了70,这点十分奇怪,苦思不得其解,需要继续跟进。