在 Android 中动画平移和缩放视图
Posted
技术标签:
【中文标题】在 Android 中动画平移和缩放视图【英文标题】:Animating translation and scaling of view in Android 【发布时间】:2010-04-11 14:16:19 【问题描述】:我必须通过更改视图的比例、位置和滚动来将视图从状态 A 变为 B。
以下代码几乎可以解决问题:
AnimationSet animation = new AnimationSet(true);
int fromXDelta = view.getScrollX();
int fromYDelta = view.getScrollY();
view.scrollTo(0, 0);
float scale = (float) widthB / (float) widthA;
// Calculate toXDelta and toYDelta
TranslateAnimation translateAnimation = new TranslateAnimation(-fromXDelta, -toXDelta, -fromYDelta, -toYDelta);
translateAnimation.setDuration(duration);
animation.addAnimation(translateAnimation);
ScaleAnimation scaleAnimation = new ScaleAnimation(1, scale, 1, scale);
scaleAnimation.setDuration(duration);
animation.addAnimation(scaleAnimation);
animation.setAnimationListener(new AnimationListener()
@Override
public void onAnimationEnd(Animation arg0)
view.clearAnimation();
// Change view to state B by modifying its layout params and scroll
@Override public void onAnimationRepeat(Animation arg0)
@Override public void onAnimationStart(Animation arg0)
);
view.startAnimation(animation);
onAnimationEnd 的逻辑使得动画结束后视图闪烁。此外,如果我不调用 clearAnimation() 动画不会按预期工作(为什么?)。
这是正确的方法吗?
谢谢!
【问题讨论】:
【参考方案1】:我不知道这是否正确,但我遇到了和你一样的问题。 我设法通过添加以下内容来消除闪烁:
动画.reset();
就在之前:
view.clearAnimation();
注意:在您的代码中,它将是 arg0.reset();
【讨论】:
【参考方案2】:您尝试设置animation.setFillAfter(true)
吗?
它基本上让您的视图的最新位置/状态在动画完成时保持不变,避免任何形式的闪烁。
【讨论】:
以上是关于在 Android 中动画平移和缩放视图的主要内容,如果未能解决你的问题,请参考以下文章
一起Talk Android吧(第四百七十七回:平移类视图动画)
CGAffineTransform 缩放和平移 - 动画前跳转
Android属性动画小练习(简单实现旋转平移淡入淡出缩放动画效果)
Android视图动画集合AndoridViewAnimations