Android – 使用animation更改左边距

我正在以下列方式更改图像视图的左边距:

ViewGroup.MarginLayoutParams layoutParams = (MarginLayoutParams) image.getLayoutParams (); layoutParams.leftMargin = VALUE; image.setLayoutParams ( layoutParams ); 

我希望保证金的变化适用于animation。 任何线索?

我试过的:

 ObjectAnimator objectAnimator = ObjectAnimator.ofFloat ( image , "x" , VALUE); objectAnimator.start(); 

这是完美的,因为图像被移动到指定的X值与animation, 但是layoutParams.leftMargin的价值保持不变! 所以我不能使用这个方法,因为如果我尝试在使用objectAnimator的值为100 后将layoutParams.leftMargin的值更改为100,则应用的值不正确(应用了200,而不是100,如果objectAnimator保留尽pipe我正在按以下方式设置左边距:

 layoutParams.leftMargin = 100; 

使用animation类,而不是ObjectAnimator。

 final int newLeftMargin = <some value>; Animation a = new Animation() { @Override protected void applyTransformation(float interpolatedTime, Transformation t) { LayoutParams params = yourView.getLayoutParams(); params.leftMargin = (int)(newLeftMargin * interpolatedTime); yourView.setLayoutParams(params); } }; a.setDuration(500); // in ms yourView.startAnimation(a); 

请注意,你应该使用正确的LayoutParams类,即如果你的观点是LinearLayout的孩子,那么params应该是LinearLayout.LayoutParams

我来到这个问题,但我不能使用它,因为我想animation边距从负值到0,所以我用valueAnimater基于user1991679答案:

 final View animatedView = view.findViewById(R.id.animatedView); final LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) animatedView.getLayoutParams(); ValueAnimator animator = ValueAnimator.ofInt(params.bottomMargin, 0); animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { params.bottomMargin = (Integer) valueAnimator.getAnimatedValue(); animatedView.requestLayout(); } }); animator.setDuration(300); animator.start(); 

您必须根据animatedView容器更改LinearLayout.LayoutParams。 你也可以使用没有ValueAnimator的旧版本的nineoldandroids。

您可以使用以下内容

 image.animate().setDuration(durationIn).translationXBy(offsetFloat).start(); 

您还可以添加.setInterpolator(new BounceInterpolator())来改变animation的外观。