setScaleX または setScaleY は、実際には左、上、右、下のプロパティを変更しないようです。getX と getY も変更されません。
ビューをスケーリングする場合、新しくスケーリングされたビューの 4 つのコーナー座標を取得する最も簡単な方法は何ですか?
getHitRect を試しましたが、正しい答えが得られません。既存の変換 (ピボットを考慮した回転とスケーリング) に基づいて新しい境界を手動で計算することを避けようとしています。
setScaleX または setScaleY は、実際には左、上、右、下のプロパティを変更しないようです。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 を使用してスケーリングしたことを前提としています。奇妙な領域にピボットがあると、事態はさらに複雑になります。