Android ScaleAnimation относится к текущему размеру, а не к фактическому размеру… как исправить?

#android #animation

#Android #Анимация

Вопрос:

У меня есть кнопка, которая увеличивает размер другого объекта при нажатии.

Оба объекта добавляются в представление в коде с

 container.addView(button)
container.addView(object)
object.scaleX = 0f;
object.scaleY = 0f;
 

Позже я хочу масштабировать анимацию от 0f до 1f … вот так:

       val scaleAnimation = ScaleAnimation(0f, 1f,
      0f, 1f, Animation.RELATIVE_TO_PARENT,
      0.5f, Animation.RELATIVE_TO_PARENT, 0.5f)
      scaleAnimation.fillAfter = true
      scaleAnimation.duration = 100
      object.startAnimation(scaleAnimation)
 

Это не работает. В ScaleAnimation 0f и 1f относятся к текущему масштабу объекта, а не к его фактическому размеру. Конечно, так не должно быть?

Если я заменю анимацию просто object.scaleX = 1f … это работает независимо от исходного scaleX. Итак, похоже, что ScaleAnimation на самом деле не анимирует свойства scaleX и scaleY объекта, он просто добавляет новый слой масштаба сверху.

Как я могу заставить анимацию работать с фактическим свойством scaleX объекта, при этом объект начинается с 0f, а затем анимируется до 1f, когда это необходимо?

Ответ №1:

Хорошо, получается, что ScaleAnimation не является подходящим аниматором для этого. В конце концов я узнал, что мне пришлось использовать:

 object.animate().scaleX(1f).scaleY(1f).setDuration(100).setInterpolator(DecelerateInterpolator())
 

Этот метод фактически анимирует фактические свойства scaleX и Y объекта, а не определяет какой-то новый масштабный слой сверху.