Matrix的setScale方法,设置中心点的理解疑问

luqing414 2015-09-06 08:34:32
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为中心来进行缩放,所以我没搞懂这后两个参数到底是干什么的
...全文
1753 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_43666002 2019-01-23
  • 打赏
  • 举报
回复
朋友你好,你做过nodejs文件下载,支持暂停,继续下载?请教实现方案,如果方便留个您邮箱地址联系,我的邮箱:liu1102yutao@sina.com
ghhryr1988 2018-11-28
  • 打赏
  • 举报
回复
能说明一下答案吗?完全没有理解
何川 2016-03-28
  • 打赏
  • 举报
回复
matrix.setScale(sx, sy, px, py); 缩放后图片右下角坐标公式(以X轴为例,Y轴同理):px-(px-原图x长)*sx 例如:图片大小150*150 matrix.setScale(0.5f, 0.5f, 300, 300); 缩放后右下角坐标就是(225,225) matrix.setScale(0.5f, 0.5f, 450, 450); 缩放后右下角坐标就是(300,300) 我自己总结的,你可以自己验证
一袭白衣 2015-09-07
  • 打赏
  • 举报
回复
不要相信你的眼睛,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个参数是表示缩放后的图片,左上角坐标,但是这个坐标会受到缩放的影响,
效果为不缩放部分的比例(参考第二组测试)
luqing414 2015-09-07
  • 打赏
  • 举报
回复
引用 2 楼 qq_24464453 的回复:
最后一个测试你怎么看图片的左上角到了10,10?目测的?
是啊,目测的,我先以为会移动到10,10,完后以10,10为中心来进行缩放,但显然不是这样,因为如果移动到10,10后缩放,图片在界面上肯定是显示不全的,我看到的效果是图片缩放后移到10,10了(左上角)
qq_24464453 2015-09-06
  • 打赏
  • 举报
回复
最后一个测试你怎么看图片的左上角到了10,10?目测的?
luqing414 2015-09-06
  • 打赏
  • 举报
回复
没人用过吗?

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧