我有一个为动画创建的类,如下所示:
class MyAnimations(val view: View) {
fun fadeAnimation() {
val fadeAnimator = ValueAnimator.ofFloat(0.2f, 1f)
fadeAnimator.addUpdateListener {
val value = it.animatedValue as Float
view.alpha = value
}
fadeAnimator.interpolator = DecelerateInterpolator(1.4f)
fadeAnimator.duration = 400
fun postAnimation() {
fadeAnimator.addListener(object : Animator.AnimatorListener {
override fun onAnimationRepeat(animation: Animator?) {
//empty
}
override fun onAnimationEnd(animation: Animator?) {
-- I WANT TO RUN CODE HERE --
}
override fun onAnimationCancel(animation: Animator?) {
//empty
}
override fun onAnimationStart(animation: Animator?) {
//empty
}
})
}
fadeAnimator.start()
}
}
在“活动”中,我的目标是制作类似的动画并在动画结束后运行 myfunction():
MyAnimations(goPiano).fadeAnimation().postAnimation(myfunction())
或这样,并编写动画结束后要运行的任何代码:
MyAnimations(goPiano).fadeAnimation().postAnimation() {
//Block of code here
}
我需要在MyAnimations类中添加和更改什么才能允许我执行此操作?我是Kotlin的新手,很想知道如何在课堂上做到这一点。谢谢!
答案 0 :(得分:0)
您可以使用高阶函数来执行此操作。您不需要为此而在函数内部
fun fadeAnimation(postAnimCallback: () -> Unit) {
val fadeAnimator = ValueAnimator.ofFloat(0.2f, 1f)
fadeAnimator.addUpdateListener {
val value = it.animatedValue as Float
view.alpha = value
}
fadeAnimator.interpolator = DecelerateInterpolator(1.4f)
fadeAnimator.duration = 400
fadeAnimator.addListener(object : Animator.AnimatorListener {
override fun onAnimationRepeat(animation: Animator?) {
//empty
}
override fun onAnimationEnd(animation: Animator?) {
postAnimCallback()
}
override fun onAnimationCancel(animation: Animator?) {
//empty
}
override fun onAnimationStart(animation: Animator?) {
//empty
}
})
fadeAnimator.start()
}
现在您可以像调用它一样
MyAnimations(goPiano).fadeAnimation() {
// post animation code
}
或
MyAnimations(goPiano).fadeAnimation(::postAnimation)
fun postAnimation() {
}