`

matrix使用:平移

 
阅读更多
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,这点十分奇怪,苦思不得其解,需要继续跟进。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics