如何使自定义动画师在 Kotlin 中工作(动画 alpha 属性)

Posted

技术标签:

【中文标题】如何使自定义动画师在 Kotlin 中工作(动画 alpha 属性)【英文标题】:How to make a custom animator work in Kotlin (animating the alpha property) 【发布时间】:2019-06-27 17:48:12 【问题描述】:

我想通过AnimatorSetImageView 上的ALPHA 属性进行动画处理(我实际上有两个动画,但我现在只使用alpha 动画来检查它是否有效)我正在使用Kotlin(而且我是新手) 我有一个内部带有 ImageView 的布局,一个带有 AnimatorSet 的 xml 和一个与布局相关的 Kotlin 类。

这里有一些我已经尝试过的选项,它们都在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_
    android:layout_
    android:background="@color/colorPrimary"
    android:gravity="center">

    <ImageView
        android:id="@+id/mLogo"
        android:layout_
        android:layout_
        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,但动画不起作用。它永远不会“淡入”。 任何帮助表示赞赏:)

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于如何使自定义动画师在 Kotlin 中工作(动画 alpha 属性)的主要内容,如果未能解决你的问题,请参考以下文章

如何让这个动画在 Edge 中工作?

如何获得动画 gif 以在 WPF 中工作?

如何使动画在 Xcode 5 iOS 7 中工作?

jQuery 动画只在 IE 中工作

UIView核心动画无法在viewdidLoad方法中工作?

在 Chrome 中工作的 SVG 上 CSS 动画的 transform-origin,而不是 FF