动画保证金变更

时间:2016-07-01 17:32:18

标签: android android-animation

我使用此代码在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 个答案:

答案 0 :(得分:2)

问题在于你没有正确使用ValueAnimator.ofInt(int... values);:你应该明确告诉动画师哪个它应该设置哪个值。因此,例如,您应该从当前值动画到所需值。如果您以前的值是 50 ,那么该语句应如下所示:

ValueAnimator varl = ValueAnimator.ofInt(50, margin);

答案 1 :(得分:2)

您可以使用我的library

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