[size=medium]android绘图中使用的矩阵是3x3的结构。[/size]
[img]http://www.moandroid.com/wp-content/uploads/2010/04/3-x-3.JPG[/img]
[size=medium]矩阵元素的功能:[/size]
[img]http://www.moandroid.com/wp-content/uploads/2010/04/Area.JPG[/img]
[size=medium]先挑与平移有关的看。观察矩阵元素功能可知,如果绘制的图形平移到[x, y], 则只需要修改矩阵右上角的2个元素就可以了。
编写一个继承了view的TransView来验证,以下是onDraw()方法。[/size]
效果图:
[img]http://images.cnblogs.com/cnblogs_com/elingwange/389869/r_TransView_%e7%bc%96%e8%be%91.jpg[/img]
[img]http://images.cnblogs.com/cnblogs_com/elingwange/389869/r_matrix_log.png[/img]
[size=medium]从log看也可以验证之前的结论。
但从效果图中看,通过matrix绘制的图形坐标有偏移,比起直接在坐标(200, 200)绘制的正圆,y坐标小了70,这点十分奇怪,苦思不得其解,需要继续跟进。
[/size]
[img]http://www.moandroid.com/wp-content/uploads/2010/04/3-x-3.JPG[/img]
[size=medium]矩阵元素的功能:[/size]
[img]http://www.moandroid.com/wp-content/uploads/2010/04/Area.JPG[/img]
[size=medium]先挑与平移有关的看。观察矩阵元素功能可知,如果绘制的图形平移到[x, y], 则只需要修改矩阵右上角的2个元素就可以了。
编写一个继承了view的TransView来验证,以下是onDraw()方法。[/size]
@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();
}
效果图:
[img]http://images.cnblogs.com/cnblogs_com/elingwange/389869/r_TransView_%e7%bc%96%e8%be%91.jpg[/img]
[img]http://images.cnblogs.com/cnblogs_com/elingwange/389869/r_matrix_log.png[/img]
[size=medium]从log看也可以验证之前的结论。
但从效果图中看,通过matrix绘制的图形坐标有偏移,比起直接在坐标(200, 200)绘制的正圆,y坐标小了70,这点十分奇怪,苦思不得其解,需要继续跟进。
[/size]