安卓动画在onAnimationEnd方法中未完成。

70
似乎在触发onAnimationEnd事件时,安卓动画并没有真正完成,尽管animation.hasEnded已经设置为true。
我想让我的视图在其ScaleAnimation结束时更改其背景drawable,它确实会更改,但可以清楚地看到它在完成前几毫秒就被更改了。问题是,新的背景出现(=正在)被缩放一小段时间,直到动画真正完成,这导致它闪烁。
有没有办法获得动画的真正结束或者只是防止新的背景在这个短时间内被缩放?
谢谢!
//编辑: 我使用 AnimationListener 来获取以下调用:
    @Override
public void onAnimationEnd(Animation animation)
{
    View view = (MyView) ((ExtendedScaleAnimation) animation).getView();

    view.clearAnimation();
    view.requestLayout();
    view.refreshBackground(); // <-- this is where the background gets changed
}

1
你是否使用AnimationListener来获取OnAnimationEnd调用,或者其他方式?你能否发布你项目中相关的代码,这样我们就可以更好地了解正在发生的事情? - FoamyGuy
当然,谢谢! 我正在编辑问题以添加代码和一些细节。 - ShadowMare
请问ShadowMare能帮我一下吗?我遇到了同样的问题,不知道该如何解决。 - Milos Cuculovic
你尝试使用下面提供的代码了吗?这个方法对我很有效。基本上让视图处理onAnimationEnd,而不是让动画本身处理。如果需要更多帮助,请告诉我。 - ShadowMare
嗨@ShadowMare,你能帮我解决这个问题吗?因为我遇到了类似的问题。 - Milos Cuculovic
你尝试过将OnAnimationEnd添加到ImageView而不是动画本身吗?你必须在那里处理动画的结束,它应该可以工作。我需要更多的代码以获得进一步的帮助。 - ShadowMare
12个回答

0

你也可以使用 setUpdateListener,然后检查动画进度的当前分数,并相应地采取行动。

这是一个 Kotlin 示例,用于淡出动画,最终使视图从布局中消失:

view.animate()
        .alpha(0f)
        .setDuration(duration)
        .setUpdateListener { animation ->
            if (animation.animatedFraction > 0.99f) {
                view.visibility = View.GONE
            }
        }
        .start()

-1
这对我有用:
@Override
public void onAnimationUpdate(ValueAnimator animation) {
    if (Float.compare(animation.getAnimatedFraction(),1.0f)) {
    // animation ended;
        //do stuff post animation
    }
}

1
这也可能发生不止一次,特别是持续时间足够长的情况下。 - Alex Cohn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接