Android: масштабирование вручную - PullRequest
2 голосов
/ 20 января 2012

Есть ли способ вручную масштабировать вид, убедившись, что позиция перемещается правильно? Единственный способ, которым я могу масштабировать это прямо сейчас, это обновить LayoutParams, существенно умножив ширину и высоту на коэффициент масштабирования. Это работает хорошо, но я не уверен, как правильно перевести позицию. Кроме того, я хочу масштабировать вид с центром, который также является центром. На самом деле я могу выполнить желаемое поведение с помощью ScaleAnimation, например:

ScaleAnimation anim = new ScaleAnimation(fromX, toX,
                fromY, toY, ScaleAnimation.RELATIVE_TO_SELF,
                0.5f, ScaleAnimation.RELATIVE_TO_SELF, 0.5f);

Однако фактические границы вида не корректируются. Большинство реализаций масштабирования и справки всегда имеют дело с ImageView, поэтому я решил, что стоит запросить только View. Я был бы очень признателен, если у кого-нибудь есть какие-либо идеи по этому вопросу.

1 Ответ

4 голосов
/ 20 января 2012

Звучит так, будто вы хотите масштабировать вид, но масштабируйте его от центра вида. Это сложно, потому что представление располагается на основе его верхнего и левого смещения от верхнего левого угла своего родителя.

Итак, если у вас есть вид сверху на 100px и слева на 100px, а также размер 50px на 50px - и вы хотите увеличить его на +10%:

width = 50px * 1.1 = 55px;
height = 50px * 1.1 = 55px;

но эти дополнительные 5 пикселей будут добавлены справа и снизу от представления, верно? поэтому нам нужно изменить смещение вида для корректировки:

top = 100px - ((100px * .1) / 2) = 97.5px

(очевидно, для левой стороны).

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

...