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的外观。