我目前在我的Android应用中有一个视图,该视图正在播放帧动画。我想动画化视图以将其大小增加到150%。当我将比例动画应用于比例动画并且比例动画完成后,我希望观众在活动的整个生命周期中都保持新的尺寸。不幸的是,现在放大动画完成后,视图会恢复为原始大小。如何获得新的动画转换呢?
我正在使用
myView.startAnimation(AnimationUtils.loadAnimation(mContext,R.anim.scaleUp150));
谢谢!
Answers:
确保在动画xml的根元素中添加以下属性:
android:fillAfter="true"
android:fillEnabled="true"
<set ...></set>
动画标签(translate
| rotate
| scale
)中还是其中?
fillAfter
都只会保留视图像素,而实际视图仍将位于初始位置。您LayoutParams
可能需要在onAminationEnd(侦听器)中手动设置视图。
尝试从代码构造动画并设置如下属性
anim.setFillEnabled(true);
anim.setFillAfter(true);
如果要将动画放在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
请也感谢其他答案, 帮助了我:)祝你好运!
如今,它变得非常容易:
view.animate().x(valueX).y(valueY).setDuration(500).start();
(在此代码段中,使用了ViewPropertyAnimator)。
也可以附加多个其他选项。
视图将位于新位置。
编辑:Qlimax的答案更好,但是由于OP尚未返回以更改选中标记,并且我无法删除接受的答案,因此我将其复制到此处:只需设置fillAfter = true fillEnabled = true
我的原始答案(有效,但相比而言有点荒谬)如下:
为了使动画后的工作能够按预期工作,至少要根据此线程,您必须编写一个onAnimationEnd
处理程序,然后在其中手动调整视图的“真实”(转换前)范围以匹配的最终结果。比例动画。
view.getLayoutParams().width = newWidth; view.getLayoutParams().height = newHeight; view.requestLayout();
。(后一个调用是必要的,以通知视图树它需要重新计算。)
android:fillEnabled
并且android:fillAfter
两个属性都必须为true。
实际上,由于您正在使用的动画似乎是嵌入在Android框架中的动画,因此我不确定您可以更改其中的任何内容。
但是,您可以按照文档中的示例创建自己的动画。如果要在动画结束后保留缩放比例,则必须放入android:fillAfter =“ true”。