gpt4 book ai didi

android - Kotlin - 如何在函数内部执行函数?

转载 作者:行者123 更新时间:2023-12-05 06:29:43 25 4
gpt4 key购买 nike

我有一个为动画创建的类,如下所示:

    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()
}
}

在我的 Activity 中,我的目标是在动画结束后执行类似这样的操作并运行 myfunction():

    MyAnimations(goPiano).fadeAnimation().postAnimation(myfunction())

或者像这样,并编写任何代码在我的动画结束时运行:

    MyAnimations(goPiano).fadeAnimation().postAnimation() {
//Block of code here
}

我需要在 MyAnimations 类中添加和更改什么才能执行此操作?我是 Kotlin 的新手,很想知道如何在我的类里面做到这一点。谢谢!

最佳答案

您可以使用高阶函数来做到这一点。你不需要函数内部的函数

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() {
}

关于android - Kotlin - 如何在函数内部执行函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53276742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com