在Android中动画化视图的翻译和缩放

时间:2010-04-11 14:16:19

标签: android animation view

我必须通过更改其比例,位置和滚动来为状态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(),动画不能按预期工作(为什么?)。

这是正确的方法吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

我不知道这是不是正确的方法,但我遇到了和你一样的问题。 我设法通过添加:

来摆脱闪烁

animation.reset();

就在:

之前

view.clearAnimation();

注意:在您的代码中,它将是arg0.reset();

答案 1 :(得分:1)

您是否尝试过设置animation.setFillAfter(true)

它基本上让动画完成后视图的最新位置/状态保持不变,避免任何闪烁。