【问题标题】:How to run several translate animations sequentially?如何顺序运行多个翻译动画?
【发布时间】:2011-05-27 19:18:59
【问题描述】:

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

此外,此动画将作为参数用于 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>

【问题讨论】:

    标签: android


    【解决方案1】:

    使用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>
    

    【讨论】:

    • 聪明!使用 startOffset 您每次翻译发生的时间。非常好。
    • 如果有多个视图怎么办,比如 10 或未知数量的视图。在那种情况下,有人怎么能依赖设置标签。假设我们不会愚蠢地创建 10 个翻译项。
    • 如果动画应该循环播放,这将不起作用。在这种情况下,您可以通过实现动画侦听器来使用下面描述的方法。
    【解决方案2】:

    Kevin 的解决方案可能会奏效,但我发现时间安排有些不准确。

    另一种选择是使用一对AnimationListener 对象,一个附加到前两个动画中的每一个。第一个动画的监听器,在onAnimationEnd(),将启动第二个动画。 onAnimationEnd() 中的第二个动画的侦听器将启动第三个动画。

    【讨论】:

    • 我没有在我的回答中包含这个,因为 howisgeek 解释说他需要一个完整的 xml 解决方案。否则,即使我也遇到了时间问题,这些回调也很有用(onAnimatonEnd() 在真正的动画结束前几毫秒触发)。
    • @Kevin Gaudin:哎呀,是的,我错过了。然而,坦率地说,这种限制感觉就像一个学生要求我们做家庭作业——我想不出你为什么会在真正的应用程序中将解决方案限制为仅限 XML。
    • 我喜欢学生作业对比 ;-) 但 Activity.overridePendingTransition(enterAnim, exitAnim) 实际上只接受资源 Id 作为输入参数。可能还有其他方法可以通过子类化 Activity 来提供这些动画,但这会过于复杂。
    • @Kevin Gaudin: ::smacks forehead:: 非常好的观点。我有时会忘记在某些情况下您不能将 Java 与动画一起使用。当然,如果使用android:idandroid:onComplete 属性对或其他东西,像这样的顺序动画转换可以在XML 中编码,这将是很巧妙的。
    • 如果我出于某种原因按顺序执行动画,我的动画会“动摇”我的活动:stackoverflow.com/questions/18899280/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多