【发布时间】:2016-11-02 19:02:08
【问题描述】:
我想在一个视图上制作两种类型的动画:TranslateAnimation 和稍后的 ScaleAnimation。问题是当 ScaleAnimation 开始时,视图会返回到它们的初始状态(在 TranslateAnimation 之前)。有没有办法做我想做的事?
【问题讨论】:
标签: android animation android-framelayout
我想在一个视图上制作两种类型的动画:TranslateAnimation 和稍后的 ScaleAnimation。问题是当 ScaleAnimation 开始时,视图会返回到它们的初始状态(在 TranslateAnimation 之前)。有没有办法做我想做的事?
【问题讨论】:
标签: android animation android-framelayout
您可以为TranslateAnimation 添加一个监听器,完成后,将View 的位置更改为动画的结束位置。
TranslateAnimation anim = new TranslateAnimation(...);
anim.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) { }
@Override
public void onAnimationRepeat(Animation animation) { }
@Override
public void onAnimationEnd(Animation animation) {
view.setX(NEW_X_POSITION);
view.setY(NEW_Y_POSITION);
}
});
但我建议实际上从旧的 TranslateAnimation/ScaleAnimation 类型的类切换到新的 ViewPropertyAnimator 框架 (http://android-developers.blogspot.co.il/2011/05/introducing-viewpropertyanimator.html)。
在新框架中你不必像上面的代码那样改变位置,语法也简单得多:
myView.animate().x(500).y(500);
您还可以使用AnimatorSet 创建一组动画,以便一起或一个接一个地播放。
延伸阅读:https://developer.android.com/reference/android/view/ViewPropertyAnimator.html
【讨论】: