动画边距变化

5
我在Android中使用这段代码来实现视图动画,它非常完美。 问题在于当我将边距设置为零或者小于当前边距时,它不会动画化。
代码如下:
          int margin = 100;


            ValueAnimator varl = ValueAnimator.ofInt(margin);
            varl.setDuration(200);
            varl.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

                @Override
                public void onAnimationUpdate(ValueAnimator animation) {
                    RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) myView.getLayoutParams();
                    lp.setMargins((Integer) animation.getAnimatedValue(), 0, 0, 0);
                    myView.setLayoutParams(lp);
                }
            });
            varl.start();

现在,当我将边距设置为100时,它会动画显示,但是当我想将其设置为零时,它会直接设置边距而没有动画效果。

 int margin = 0;



            ValueAnimator varl = ValueAnimator.ofInt(margin);
            varl.setDuration(200);
            varl.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

                @Override
                public void onAnimationUpdate(ValueAnimator animation) {
                    RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) myView.getLayoutParams();
                    lp.setMargins((Integer) animation.getAnimatedValue(), 0, 0, 0);
                    myView.setLayoutParams(lp);
                }
            });
            varl.start();
2个回答

4
问题在于你没有正确使用 ValueAnimator.ofInt(int... values); :你应该明确告诉动画从哪个值到哪个值进行动画。因此,例如,你应该从当前值到期望值进行动画。如果先前的值为50,那么语句应该像这样:ValueAnimator varl = ValueAnimator.ofInt(50, margin);

@medo 好的,你可以将答案标记为“已接受”,这样我们就知道这个问题已经解决了。我很高兴能够帮助你。 - Aleksandar Stefanović
当然,我只需要等待5分钟完成并标记它。 - medo

3

您可以使用我的来做到这一点:

ViewPropertyObjectAnimator.animate(myView).leftMargin(100).setDuration(200).start();

1
你真是个救命恩人!谢谢! - hamthenormal

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