如何顺序运行几个翻译动画?

how*_*eek 15 android

我想按顺序运行下面显示的三个翻译动画.即,在一个翻译动画结束后,第二个翻译动画开始.但是,它们同时运行.

此外,此动画将用作overridePendingTransition()作为参数.所以,我必须解决这个问题,只能使用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>
Run Code Online (Sandbox Code Playgroud)

Kev*_*din 28

使用android:startOffset来延迟动画.

以您的示例,这应该做你想要的:

<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>
Run Code Online (Sandbox Code Playgroud)


Com*_*are 17

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

另一种选择是使用一对AnimationListener对象,一对对应于前两个动画中的每一个.第一个动画的监听器onAnimationEnd()将启动第二个动画.第二个动画的监听器onAnimationEnd()将启动第三个动画.

  • @Kevin Gaudin:::打击前额::非常好点.我有时会忘记有些情况下你不能将Java与动画一起使用.当然,对于像这样的顺序动画转换可以使用`android:id`和`android:onComplete`属性对或其他东西进行编码. (4认同)
  • 我没有在我的回答中包含这个,因为howisgeek解释说他需要一个完整的xml解决方案.否则这些回调可能很有用,即使我遇到了那些时间问题(onAnimatonEnd()在真实动画结束前几毫秒触发). (3认同)
  • 如果我出于某种原因顺序执行此操作,我的动画会"震撼"我的活动:http://stackoverflow.com/questions/18899280/multiple-xml-animation-is-not-working (3认同)
  • 我喜欢学生作业比较;-)但是Activity.overridePendingTransition(enterAnim,exitAnim)实际上只将资源ID作为输入参数.可能还有其他方法通过子类化Activity来提供这些动画,但这会过于复杂. (2认同)