我改变以下列方式的形象图的左边距:
ViewGroup.MarginLayoutParams layoutParams = (MarginLayoutParams) image.getLayoutParams ();
layoutParams.leftMargin = VALUE;
image.setLayoutParams ( layoutParams );
我想在保证金的变化与动画的应用。 任何线索?
我的尝试:
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat ( image , "x" , VALUE);
objectAnimator.start();
这完美的作品,作为图像移动到动画指定的X值不过 layoutParams.leftMargin的值保持不变! 所以我不能使用此方法,因为如果我尝试使用objectAnimator与价值100后layoutParams.leftMargin的值更改为100,应用的价值是不正确的(200应用,而不是100,效果如果objectAnimator遗体eventhough我设置左边界以下列方式:
layoutParams.leftMargin = 100;
使用动画类,而不是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
我来过这个问题,但因为我想从负值到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。 您还可以使用旧版本nineoldandroids没有ValueAnimator。
从user1991679答案是伟大的,但如果你需要从其他任何值,但0插值保证金,你需要在计算中使用它:
ViewGroup.MarginLayoutParams params = (MarginLayoutParams) mBottomLayout.getLayoutParams();
final int bottomMarginStart = params.bottomMargin; // your start value
final int bottomMarginEnd = <your value>; // where to animate to
Animation a = new Animation() {
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
ViewGroup.MarginLayoutParams params = (MarginLayoutParams) mBottomLayout.getLayoutParams();
// interpolate the proper value
params.bottomMargin = bottomMarginStart + (int) ((bottomMarginEnd - bottomMarginStart) * interpolatedTime);
mBottomLayout.setLayoutParams(params);
}
};
a.setDuration(300);
mBottomLayout.startAnimation(a);
在我来说,我需要一个动画“进入屏幕”动画,从“-48dp”即将为0如果没有初始值,动画总是0,因此跳,没有动画视图。 解决的办法是插值补偿,并将其添加到原来的值。
您可以使用以下
image.animate().setDuration(durationIn).translationXBy(offsetFloat).start();
您还可以添加.setInterpolator(new BounceInterpolator())
来更改动画的外观。