如何获得缩放视图的界限?

时间:2013-06-14 19:46:51

标签: android

似乎setScaleX或setScaleY实际上并未改变left,top,right,bottom属性。 getX和getY也保持不变。

因此,如果我缩放视图,最简单的方法是获得新缩放视图的4个角坐标?

我试过getHitRect,但这并没有给我正确的答案。我试图避免根据现有的转换手动计算新边界(旋转和带有枢轴因子的比例)。

2 个答案:

答案 0 :(得分:4)

在探索视图api后,看起来没有直接的API方法可以做到这一点。

但是,您可以通过抓取视图的变换矩阵并使用它来获取新边界来轻松获取新点。

这样的事情:

Matrix m = view.getMatrix();
Rect bbox = new Rect();
view.getDrawingRect(bbox); 
m.mapRect(bbox);  

如果你想直接对(x,y)coordiantes进行操作,有一个matrix.mapPoints可以达到相同的效果。

答案 1 :(得分:2)

我相信如果你得到宽度和高度并乘以刻度,你将获得缩放的宽度和高度。

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轴进行缩放。如果你在陌生地区拥有枢纽,事情会变得更加复杂。