GcsSloop / AndroidNote

安卓学习笔记
http://www.gcssloop.com/#blog
9.18k stars 2.13k forks source link

缩放(scale)我有一个疑问 #83

Open NathansLiu opened 7 years ago

NathansLiu commented 7 years ago
  RectF rect1 = new RectF(0,-200,200,0);   // 矩形区域
 Paint paint1= new Paint();
 paint1.setColor(Color.BLACK);
 Paint paint2= new Paint();
 paint2.setColor(Color.BLUE);

 canvas.drawRect(rect1,paint1);
 canvas.scale(0.5f,0.5f,100,0);
//画一个缩放前 矩形蓝
 canvas.drawRect(rect1,paint2);

1

  RectF rect1 = new RectF(0,-200,200,0);   // 矩形区域
 Paint paint1= new Paint();
 paint1.setColor(Color.BLACK);
 Paint paint2= new Paint();
 paint2.setColor(Color.BLUE);

 canvas.drawRect(rect1,paint1);
 canvas.scale(0.5f,0.5f,200,0);
//画一个缩放前 矩形蓝
 canvas.drawRect(rect1,paint2);

2

我将蓝色矩形第一次移动100,缩放中心移动100,位于黑色矩形底部中心。 然而第二次移动200,缩放中心应该在黑色矩形右边线上,目测只是移动了50。 那么移动距离究竟从哪里测量才对?

NathansLiu commented 7 years ago

不好意思,请忽视注释

zqhead commented 6 years ago

你可想象下,是画布的坐标系进行了缩放,在(200,0)的位置做缩放,相当于缩放后的坐标原点在原来(100,0)的位置,而(200,0)的位置是缩放中心不变,两者之间的距离是200,位置就是图2的效果

而在(100,0)的位置做做缩放,相当于缩放后的坐标原点是原来的(50,0)