#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 объекта, а не определяет какой-то новый масштабный слой сверху.