How to make a custom animator work in Kotlin (animating the alpha 属性)

How to make a custom animator work in Kotlin (animating the alpha property)

我想通过 AnimatorSetImageView 上的 ALPHA 属性 制作动画(我实际上有两个动画,但我使用的是 alpha现在只有一个,以便检查它是否有效)我正在使用 Kotlin(我是新手) 我有一个内部有 ImageView 的布局,一个 xml 与 AnimatorSet 和一个与布局相关的 Kotlin class。

这里有一些我已经尝试过的选项,所有选项都在 onCreate 方法中并使用了 Kotlin extensions:

mLogo.post {
        slideUpAndFadeIn = AnimatorInflater.loadAnimator(this, 
R.animator.slide_up_and_fade_in) as AnimatorSet
        slideUpAndFadeIn.duration = 250
        slideUpAndFadeIn.setTarget(mLogo)
        slideUpAndFadeIn.start()
}

mLogo.animate().apply {
        interpolator = LinearInterpolator()
        duration = 500
        alpha(1f)
        startDelay = 1000
        start()
    }

val objectAnimator = ObjectAnimator.ofFloat(mLogo, View.ALPHA, 0.0f, 1.0f)
    objectAnimator.duration = 250
    objectAnimator.interpolator = AccelerateDecelerateInterpolator()
    objectAnimator.start()

这是我现在的代码:

MainActivity.kt

import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    private lateinit var slideUpAndFadeIn : AnimatorSet

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    slideUpAndFadeIn = AnimatorInflater.loadAnimator(this, 
    R.animator.slide_up_and_fade_in) as AnimatorSet
    slideUpAndFadeIn.duration = 250
    slideUpAndFadeIn.setTarget(mLogo)
    slideUpAndFadeIn.start()
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorPrimary"
    android:gravity="center">

    <ImageView
        android:id="@+id/mLogo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/main_logo"
        android:layout_margin="@dimen/dimen_margin_main_logo"
        android:visibility="invisible"/>

</LinearLayout>

slide_up_and_fade_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="together">
    <objectAnimator
        android:propertyName="translationY"
        android:valueFrom="1"
        android:valueTo="50"
        android:valueType="intType"
        android:interpolator="@android:interpolator/fast_out_linear_in"/>

<objectAnimator
        android:propertyName="alpha"
        android:valueFrom="0.0"
        android:valueTo="1.0"
        android:valueType="floatType"/>
</set>

应用程序没有崩溃,因此没有 NullPointerException,但动画不起作用。它从不 "fades in"。 感谢您的帮助:)

'visibility'和'alpha'是不同的属性。在设置 alpha 动画时,您应该在 xml 布局中使用 android:alpha="0" 而不是 android:visibility="invisible"