似乎 setScaleX 或 setScaleY 实际上并没有改变 left,top,right,bottom 属性。getX 和 getY 也保持不变。
因此,如果我缩放视图,获得新缩放视图的 4 个角坐标的最简单方法是什么?
我试过 getHitRect 但这并没有给我正确的答案。我试图避免根据现有的转换(旋转和缩放与枢轴因素)手动计算新的界限。
似乎 setScaleX 或 setScaleY 实际上并没有改变 left,top,right,bottom 属性。getX 和 getY 也保持不变。
因此,如果我缩放视图,获得新缩放视图的 4 个角坐标的最简单方法是什么?
我试过 getHitRect 但这并没有给我正确的答案。我试图避免根据现有的转换(旋转和缩放与枢轴因素)手动计算新的界限。
在探索了视图 api 之后,似乎没有直接的 API 方法可以做到这一点。
但是,您可以通过抓取视图的变换矩阵并使用它来获取新边界来轻松获取新点。
像这样的东西:
Matrix m = view.getMatrix();
Rect bbox = new Rect();
view.getDrawingRect(bbox);
m.mapRect(bbox);
如果您想直接对 (x,y) 坐标进行操作,则可以使用 matrix.mapPoints 来获得相同的结果。
我相信如果你得到宽度和高度并将其乘以比例,你将得到缩放的宽度和高度。
int scaledWidth = getWidth() * getScaleX();
int scaledHeight = getHeight() * getScaleY();
int newLeft = getLeft() + (scaledWidth / 2);
int newRight = newLeft + scaledWidth;
int newTop = getTop() + (scaledHeight / 2);
int newBottom = newTop + scaledHeight;
这是假设您使用视图中心的轴 x 和 y 进行缩放。如果你在奇怪的区域有支点,事情就会变得复杂得多。