我开始学习Android版Kotlin。我正在尝试制作一个简单的动画,其中徽标缩小到其大小的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方法。
哪种是制作动画的最佳方法?使用动画文件时,是否可以通过动画移动对象的边界?