闪烁动画 Kotlin

问题描述 投票:0回答:1

我已经为此苦苦挣扎了几天。我为 TextView 实现了闪烁动画代码。不过,我想我需要修复一点

fromAlpha
toAlpha
。如果您只放置
fromAplha = 0.0f
toAplha = 1.0f
,它似乎会逐渐淡入和淡出。怎样才能做到不出现闪烁之类的褪色呢? 请帮助我。

private fun View.blink(
    times: Int = Animation.INFINITE,
    duration: Long = 800L,
    offset: Long = 20L,
    minAlpha: Float = 0.0f,
    maxAlpha: Float = 1.0f,
    repeatMode: Int = Animation.ABSOLUTE,
) {
    startAnimation(
        AlphaAnimation(minAlpha, maxAlpha).also {
            it.duration = duration
            it.startOffset = offset
            it.repeatMode = repeatMode
            it.repeatCount = times
        },
    )
}
kotlin android-animation
1个回答
0
投票

Android 的美妙之处在于,您实际上可以检查源代码,如果这里有 AlphaAnimation https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/view/ animation/AlphaAnimation.java 你可以看到它是如何工作的,它实际上是一个非常简单的类。特别是,

    /**
     * Changes the alpha property of the supplied {@link Transformation}
     */
    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t) {
        final float alpha = mFromAlpha;
        t.setAlpha(alpha + ((mToAlpha - alpha) * interpolatedTime));
    }

您可以看到该函数如何负责随时间设置 alpha。因此,您可以复制/粘贴整个类,将其命名为 FlickerAnimation,然后将该行更改为适合您的内容,或者您可以使用 AlphaAnimation 作为 FlickerAnimation 的基类,然后重写上面的方法。 开/关行为可能类似于:

t.setAlpha((interpolatedTime < 0.5) ? mFromAlpha : mToAlpha);

按照文档,interpolatedTime 从 0.0 到 1.0 变化https://developer.android.com/reference/android/view/animation/Animation#applyTransformation(float,%20android.view.animation.Transformation) 一般来说,为了制作漂亮的动画,您必须相应地调整数学函数,例如在这种情况下,您可能需要一个调整三种状态时间的转换关闭函数,而不是开/关函数。

© www.soinside.com 2019 - 2024. All rights reserved.