使用setScale和setTranslate(矩阵)

10
在我的Android应用中,我有一张图片可以加载。用户可以放大、缩小和左右移动这张图片。目前只能同时使用其中一个功能。
经过多次测试,我发现最后调用的功能会生效。
matrix.setScale(zoom, zoom); // this will not work
matrix.setTranslate(currentX, currentY); // this will work
canvas.drawBitmap(image, matrix, null);

如果我运行完全相同的代码,只是将setScale第二个参数更改,那么它就可以工作了,但setTranslate则不行。

这似乎应该是一个简单的答案。 顺便说一下:使用post的方式对于我的代码设置来说不实用。

matrix.postScale();
matrix.postTranslate(); 

提前致谢

2个回答

24

当您调用任何一个set*()方法时,您将替换矩阵的整个内容。在第一个示例中,只有setTranslate()被考虑在内。您需要使用pre*()和post*()方法来组合平移和缩放操作。


1
啊,我有一种感觉它被重置了。虽然它被重置有点奇怪,似乎与“设置”相反。谢谢。 - Paramount

2

响应代码 Romain

matrix.setScale(zoom, zoom); // this will not work
matrix.postTranslate(currentX, currentY); // this will work
canvas.drawBitmap(image, matrix, null);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接