【问题标题】:clearAnimation() - How to have animation stay in final position?clearAnimation() - 如何让动画保持在最终位置?
【发布时间】:2013-08-22 14:07:37
【问题描述】:

想象一下这个场景,我有一个从左到右穿过屏幕的位图和一个按钮,按下时会调用clearAnimation()

当按下此按钮时,它会在移动位图上调用clearAnimation(),但位图会停留在屏幕上的位置(左右之间的某个位置)。

我实际上想要发生的是,当按下按钮时,位图结束于动画点的末尾(屏幕右侧)

知道如何实现这一点吗?下面是我的动画代码

questionAnimation = AnimationUtils.loadAnimation(QuestionActivity.this, R.anim.left_to_right);
questionWrapper.setBackgroundDrawable(getResources().getDrawable(R.drawable.imageview_rounded));
questionWrapper.startAnimation(questionAnimation);

【问题讨论】:

    标签: android android-animation


    【解决方案1】:

    我认为您的动画发生的情况是它的 setFillAfter() 默认设置为 true,或者您在应用动画之前已将其设置为 true,通过 java 或从 xml 所以首先您应该将 setFillAfter 设置为 false 或者您可以直接将 setFillEnabled 更改为 false 就像这里在应用于 set 的 xml 中一样

    <set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="false" >
    
    <translate
        android:duration="300"
        android:fromYDelta="100%p"
        android:toYDelta="0" />
    
    <alpha
        android:duration="300"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
    
    </set>
    

    或者

    <set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillEnabled="false" >
    
    <translate
        android:duration="300"
        android:fromYDelta="100%p"
        android:toYDelta="0" />
    
    <alpha
        android:duration="300"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
    
    </set>
    

    因此,在这种情况下,当动画结束或清除时,它不会保留视图图像(将您的图像暂停在中间)所以其次,您必须在清除动画时通过代码设置图像的新位置,即屏幕右侧或动画自然结束,因为您必须将实际视图(ImageView)放置到新位置(因为这之前由 FillAfter 处理,但由于在按下清除动画时暂停视图出现故障,您需要将其删除,所以现在您必须自己覆盖它的功能)通过设置 ImageView 的属性,比如如果它在 RelativeLayout 中,然后将 AlignParentRight 的属性设置为 true。

    【讨论】:

    • 这是我应该做的标准方式还是 clearanimation / fill 方法有问题?
    • 如果您希望动画在任何时候立即结束(即使用 clearAnimation 我认为在这种情况下很安静),那么据我所知,这是正确的方法。它被大多数人接受,因为我也处于必须使用 fillEnable false 的情况,然后我遵循以下问题中讨论的相同程序stackoverflow.com/questions/7824079/…stackoverflow.com/questions/8411903/…
    • 谢谢。在我的情况下,在 clearAnimation 之后调用 invalidate() 似乎可以解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 2012-10-11
    相关资源
    最近更新 更多