【问题标题】:Animating translation and scaling of view in Android在 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() 动画不会按预期工作(为什么?)。

这是正确的方法吗?

谢谢!

【问题讨论】:

    标签: android animation view


    【解决方案1】:

    我不知道这是否正确,但我遇到了和你一样的问题。 我设法通过添加以下内容来消除闪烁:

    动画.reset();

    就在之前:

    view.clearAnimation();

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

    【讨论】:

      【解决方案2】:

      您尝试设置animation.setFillAfter(true) 吗?

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

      【讨论】:

        猜你喜欢
        • 2023-04-08
        • 2011-11-29
        • 1970-01-01
        • 2018-07-03
        • 2015-03-30
        • 1970-01-01
        • 2013-12-17
        • 2011-03-31
        • 2012-07-08
        相关资源
        最近更新 更多