如何在Android中为视图设置动画并使其保持新的位置/大小?

时间:2010-07-27 15:14:13

标签: android animation

我目前在Android应用中有一个视图,视图正在播放帧动画。我想为视图设置动画,将其大小增加到150%。当我对其应用缩放动画并完成缩放动画时,我希望视图在活动的其余部分生命周期中保持新的大小。不幸的是,当放大动画完成时,视图会快速恢复到原始大小。如何才能保持新的动画转换?

我正在使用

myView.startAnimation(AnimationUtils.loadAnimation(mContext,R.anim.scaleUp150));

谢谢!

7 个答案:

答案 0 :(得分:148)

确保将以下属性添加到动画xml中的根元素

android:fillAfter="true" 
android:fillEnabled="true"

答案 1 :(得分:52)

尝试从代码构建动画并设置像这样的属性

anim.setFillEnabled(true);
anim.setFillAfter(true);

答案 2 :(得分:30)

如果您想将动画放入xml ,可能需要此功能来帮助:

<set
android:fillEnabled="true"
android:fillAfter="true"
xmlns:android="http://schemas.android.com/apk/res/android">

<translate
    android:fromYDelta="0"
    android:toYDelta="-20%p"
    android:duration="7000" />

</set>

https://stackoverflow.com/a/6519233/371749

还请欣赏其他答案, 帮帮我:)祝你好运!

答案 3 :(得分:19)

如今它变得非常简单:

view.animate().x(valueX).y(valueY).setDuration(500).start();

(在此片段中使用了ViewPropertyAnimator)。

可以附加多个其他选项。

视图将位于新位置。

答案 4 :(得分:2)

编辑:Qlimax的答案更好,但由于OP没有返回更改复选标记,我无法删除已接受的答案,我将在此复制:只需设置fillAfter = true fillEnabled = true

我的原始答案(有效,但相比之下有点荒谬)如下:

为了让动画在动画之后按预期工作,至少根据this thread,你必须编写一个onAnimationEnd处理程序,并在那里,手动调整“真实”(转换前) )视图的边界以匹配缩放动画的最终结果。

答案 5 :(得分:1)

实际上,由于您使用的动画似乎是嵌入在Android框架中的动画,我不确定您是否可以更改其中的任何内容。
但是,您可以按照the example in the documentation创建自己的动画。如果你想在动画结束后保留​​缩放比例,你必须把android:fillAfter =“true”。

答案 6 :(得分:1)

将SET:fillAfter =“true”放在SET标签中 - 因为将它们放入动画标签会将它们限制为“转换参数”或“在/动画参数期间”。 SET中的参数将在完成动画后应用您正在寻找的变换。