当前位置: 代码迷 >> Android >> Matrix的setScale步骤,设置中心点的理解疑问
  详细解决方案

Matrix的setScale步骤,设置中心点的理解疑问

热度:20   发布时间:2016-04-27 23:04:18.0
Matrix的setScale方法,设置中心点的理解疑问
Matrix有一个setScale方法如下:

public void setScale(float sx, float sy, float px, float py) Set the matrix to scale by sx and sy, with a pivot point at (px, py).The pivot point is the coordinate that should remain unchanged by the specified transformation.


这个方法用来设置缩放比例,但我对后面两个参数始终无法理解,看API的意思是在动画变化中不变的点,或者理解为缩放的中心点?
我自己写了一个Demo来测试,首先画一个Bitmap

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.test);
canvas.drawBitmap(bitmap, 0, 0, null);

这个图片的宽是400,高是598,完后我设置Matrix后再画一遍

Matrix matrix = new Matrix();matrix.setScale(0.5f, 0.5f, 200, 299);
canvas.drawBitmap(bitmap, matrix, null);

这里的200,299正好是宽高的一半,也就是原图片的中心点,结果是图片被缩小了一半,完后还移动到了原图片的正中心显示,所以我以为是图片以200,299这个点为中心来缩放

接着测试

Matrix matrix = new Matrix();matrix.setScale(0.5f, 0.5f, 10, 10);
canvas.drawBitmap(bitmap, matrix, null);

这里将参数换成了10,10,结果发现,图片还是缩放一半,但缩放后,是图片的左上角到了10,10,不是按上面理解的以10,10为中心来进行缩放,所以我没搞懂这后两个参数到底是干什么的
------解决思路----------------------
最后一个测试你怎么看图片的左上角到了10,10?目测的?
------解决思路----------------------
不要相信你的眼睛,10px 和 5px 你能分清楚?
在DDMS把手机/ 模拟器的截屏拿出来,然后用系统画图打开,
选择区域去量吧~


matrix.setScale(0.5f, 0.5f, 300, 300);
 canvas.drawBitmap(bitmap, matrix, null);

你会发现左上角的坐标是 (150,150)

matrix.setScale(0.2f, 0.5f, 300, 300);
 canvas.drawBitmap(bitmap, matrix, null);

你会发现左上角坐标是 (240,150)

到这里就应该可以下结论了:
后面2个参数是表示缩放后的图片,左上角坐标,但是这个坐标会受到缩放的影响,
效果为不缩放部分的比例(参考第二组测试)
  相关解决方案