【问题标题】:Activity animation does not working properly活动动画无法正常工作
【发布时间】:2014-09-01 16:43:12
【问题描述】:

Edited:当activity打开下一个activity时,在push_down_in.xml和push_down_out.xml中,只有最后一个translate动画被动画化。第一个翻译标签没有被动画化。我想让动画像两个不同的一半。前半部分必须非常快,而后半部分应该很慢。使用默认插值器我没有得到我想要的确切输出。如果有人有这个想法,请帮助我。代码是

pushing_down_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <set android:ordering="sequentially" >
        <set>
            <translate
                android:duration="1000"
                android:fromYDelta="0"
                android:toYDelta="65%" />
        </set>
        <set>
            <translate
                android:duration="1500"
                android:fromYDelta="65%"
                android:toYDelta="100%p" />
        </set>
    </set>

</set>

pushing_down_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <set android:ordering="sequentially" >
        <set>
            <translate
                android:duration="500"
                android:fromYDelta="-100%p"
                android:toYDelta="-35%" />
        </set>
        <set>
            <translate
                android:duration="1000"
                android:fromYDelta="-65%p"
                android:toYDelta="0" />
        </set>
    </set>

</set>

在主要活动中

Intent i=new Intent(getApplicationContext(),Activity2.class);
startActivity(i);
overridePendingTransition(R.anim.push_down_out,R.anim.push_down_in);

提前致谢

【问题讨论】:

  • Not working properly你能详细说明一下吗?
  • 下一个活动打开时,当前活动必须从底部出去,另一个活动必须从顶部出来。我正在打开第二个活动,所以第一个活动必须出去,因为 65% 必须走得更快,然后剩下的应该很慢。就像在 objectAnimator 中一样,我们将两个以上的动画放在一起。
  • 只显示动画的后半部分。但是前半部分根本没有显示

标签: android android-layout android-animation


【解决方案1】:

我不是 100% 确定,但我认为如果您使用 ViewAnimationsandroid:ordering 将被忽略。 由于您只是想制作一个随着时间变慢的动画,您也可以使用interpolator。见以下代码:

pushing_down_out.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:ordering="sequentially"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator">
    <translate
        android:duration="2500"
        android:fromYDelta="0"
        android:toYDelta="100%" />
</set>

pushing_down_in.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:ordering="sequentially"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator">
    <translate
        android:duration="1500"
        android:fromYDelta="-100%p"
        android:toYDelta="0%" />
</set>

所以我基本上只是将您的翻译动画合并为一个并应用了插值器。插值器首先负责“使”动画快速“化”,然后随着时间的推移逐渐减慢。

遵循所有可用的插值器:

@android:anim/accelerate_decelerate_interpolator
@android:anim/accelerate_interpolator
@android:anim/anticipate_interpolator
@android:anim/anticipate_overshoot_interpolator
@android:anim/bounce_interpolator
@android:anim/cycle_interpolator
@android:anim/decelerate_interpolator
@android:anim/linear_interpolator
@android:anim/overshoot_interpolator

您可以在Docs (click) 中阅读有关它们的更多信息。

编辑 - 自定义插值器

还可以自定义插值器的速度。只需在您的 res/anim 文件夹中创建一个新的 *.xml 文件并添加以下行:

<accelerateDecelerateInterpolator
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:factor="2" />

有趣的是android:factor
也可以使用自己的公式创建自己的插值器。你可以阅读更多关于它的信息here (click)

【讨论】:

  • 没关系。但我需要自定义插值器本身。
  • 你能告诉我如何在我的情况下使用它。上半场持续时间为 500,下半场持续时间为 1000。谢谢
  • 好吧,如果你想完全遵守这个时间表,你需要创建一个自己的插值器,这更像是一个数学问题,而不是一个特定于编程的问题(我链接的帖子我的帖子很好地解释了这一点)。我建议您使用accelerate_interpolator - 在整个过程中平稳加速。 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-29
  • 2021-06-11
  • 1970-01-01
  • 2012-03-03
  • 2017-08-06
  • 2012-10-04
相关资源
最近更新 更多