matrix使用:平移

[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]


@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]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值