在Android中实现视图的平移和缩放动画

5

我需要将一个视图从状态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个回答

2

我不确定这是否是正确的方法,但我之前遇到了与你类似的问题。

通过添加以下代码:

animation.reset();

在以下代码之前:

view.clearAnimation();

我设法解决了闪烁的问题。

注意:在你的代码中,应该是arg0.reset();


1
你尝试过设置 animation.setFillAfter(true) 吗?
这基本上允许你的视图在动画完成时保持最新的位置/状态,避免任何闪烁。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接