Я начинаю изучать Kotlin для Android. Я пытаюсь сделать простую анимацию, где логотип уменьшается до 0,2 от его размера и идет вверх и влево от экрана.
Я заметил, что есть два способа сделать это: через файл анимации xml и метод apply ().
//Using the animation xml file
val animation: Animation = AnimationUtils.loadAnimation(this@AdicionarItemActivity, R.anim.splash_logo);
iv_splash_logo.startAnimation(animation)
//Using the apply method
iv_splash_logo.apply {
alpha = 0f
visibility = View.VISIBLE
animate()
.scaleX(0.2f)
.scaleY(0.2f)
.alpha(1f)
.setDuration(1000)
.setListener(object : AnimatorListenerAdapter() {
override fun onAnimationEnd(animation: Animator?) {
iv_splash_logo.apply {
animate()
.setDuration(1000)
.translationYBy(-100f)
.translationX(-400f)
.translationY(-700f)
}
}
})
}
Код файла анимации:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2500"
android:fillAfter="true">
<scale
android:fromXScale="1"
android:fromYScale="1"
android:toXScale="0.2"
android:toYScale="0.2"
/>
<translate
android:fromXDelta="0%p"
android:fromYDelta="0%p"
android:toXDelta="-5%p"
android:toYDelta="-5 %p"/>
</set>
Проблема двойная, действительно:
1) При использовании файла анимации происходит анимация, но физические границы объекта остаются прежними. Я имею в виду, что если я добавлю OnCLickListener, я могу вызвать его, если щелкну там, где раньше находилось изображение, а не туда, куда оно переместилось после анимации.
2) Метод apply () не является наилучшей практикой, поскольку вложение нескольких анимаций через AnimatorListenerAdapter делает код нечитаемым и уродливым. Но границы объекта физически движутся вместе с анимацией, что я и хочу сделать.
В конце концов, основная цель - изменить размер и переместить логотип из центра, где он заполняет большую часть области экрана, и иметь возможность щелкнуть его, чтобы выполнить какое-либо действие. Файл анимации не позволяет мне сделать это, потому что я могу щелкнуть там, где раньше было , и по-прежнему вызывать метод Click.
Какой лучший способ сделать анимацию? Можно ли переместить границы объекта с помощью анимации, когда я использую файл анимации?