Получите настоящий Rect of view после ObjectAnimator ScaleX ScaleY - PullRequest
0 голосов
/ 23 сентября 2019

Я масштабирую вид, и мне нужно проверить, пересекает ли этот вид другой вид.Итак, я вычисляю его Rect:

Rect rc2 = new Rect((int) asteroid.getView().getX(),
(int) asteroid.getView().getY(),
(int) asteroid.getView().getX() + asteroid.getView().getWidth(),
(int) asteroid.getView().getY() + asteroid.getView().getHeight());

Проблема в том, что у этого представления есть анимации scaleX и scaleY, поэтому, например, когда анимации имеют значение 0,5f от значения Scale, представление имеет другойsize, но значения, возвращаемые getX () getY () getWidth () ... являются ошибочными, поскольку они являются значениями представления перед анимацией, как вы можете проверить в ответе здесь: getWidth не возвращает другое значениепосле масштабирования

я знаю, что для получения реальной ширины необходимо умножить ее на значение масштаба.Итак, я сделал это:

float realWidth = asteroid.getView().getWidth() * asteroid.getView().getScaleX();
float realHeight= asteroid.getView().getHeight() * asteroid.getView().getScaleX();
float realX = asteroid.getView().getX()-((asteroid.getView().getWidth()/2.0f)*(asteroid.getView().getScaleX()-1));
float realY = asteroid.getView().getY()-((asteroid.getView().getHeight()/2.0f)*(asteroid.getView().getScaleX()-1));
Rect rc2 = new Rect((int) realX,
(int) realY,
(int) (realX + realWidth),
(int) (realY + realHeight));

Кажется, это работает, но я думаю, что это не оптимизировано.Вы знаете лучший способ сделать это?

Большое спасибо.

...