Android 如何按顺序运行多个翻译动画?

Android 如何按顺序运行多个翻译动画?,android,Android,我想按顺序运行下面显示的三个平移动画。i、 e.一个平移动画结束后,第二个平移动画开始。然而,它们同时运行 此外,此动画将作为参数用于重写PendingTransition()。所以,我必须解决这个问题,只有通过使用XML代码 有人知道我该怎么做吗 <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/linear_interpolator" a

我想按顺序运行下面显示的三个平移动画。i、 e.一个平移动画结束后,第二个平移动画开始。然而,它们同时运行

此外,此动画将作为参数用于重写PendingTransition()。所以,我必须解决这个问题,只有通过使用XML代码

有人知道我该怎么做吗

<set
xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator"
android:fillAfter="true">

<translate
    android:fromXDelta="100%p"
    android:toXDelta="-20%p"
    android:duration="1000" />

<translate
    android:fromXDelta="-20%p"
    android:toXDelta="20%p"
    android:duration="1000" />

<translate
    android:fromXDelta="20%p"
    android:toXDelta="0"
    android:duration="1000" />
</set>

用于延迟动画

就您的示例而言,这应该满足您的要求:

<set
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/linear_interpolator"
    android:fillAfter="true">

    <translate
        android:fromXDelta="100%p"
        android:toXDelta="-20%p"
        android:duration="1000" />

    <translate
        android:startOffset="1000"
        android:fromXDelta="-20%p"
        android:toXDelta="20%p"
        android:duration="1000" />

    <translate
        android:startOffset="2000"
        android:fromXDelta="20%p"
        android:toXDelta="0"
        android:duration="1000" />
</set>

凯文的解决方案可能有效,但我发现时间安排有点不准确


另一个选项是使用一对
AnimationListener
对象,前两个动画各有一个对象。第一个动画的侦听器(位于
onAnimationEnd()
中)将启动第二个动画。第二个动画的侦听器(位于
onAnimationEnd()
中)将启动第三个动画

我的回答中没有包括这一点,因为howisgeek解释说他需要一个完整的xml解决方案。否则,即使我也遇到了时间问题,这些回调也会很有用(onanimatoned()在真正的动画结束前几毫秒触发)。@Kevin Gaudin:Oops,是的,我错过了。然而,坦率地说,这种限制感觉就像是一个学生要求我们做家庭作业——我想不出为什么你会将XML的解决方案限制在一个真正的应用程序中。我喜欢学生家庭作业的比较;-)但是Activity.overridePendingTransition(enterAnim、exitAnim)实际上只将资源ID作为输入参数。通过子类化活动,可能还有其他方法提供这些动画,但这太复杂了。@Kevin Gaudin:::smacks Forum::非常好。我忘记了有时候有些场景不能在动画中使用Java。当然,像这样的连续动画转换可以用XML编码,使用
android:id
android:onComplete
属性对或其他什么。如果我出于某种原因连续进行动画,我的动画会“动摇”我的活力:聪明!使用startOffset设置每次翻译发生的时间。非常好。如果有多个视图,比如说10个或未知数量的视图,该怎么办。在这种情况下,一个人怎么能依赖set标签呢。假设我们不会愚蠢地创建10个翻译项。如果动画应该循环,这将不起作用。在这种情况下,可以通过实现动画侦听器来使用下面描述的方法。