动画RelativeLayout边距变化

4

代码:

RelativLayout.LayoutParams params = (RelativLayout.LayoutParams) view1.getLayoutParams();
params.setMargins(50, 0, 0, 0);
view1.setLayoutParams(params);

以上代码运行正常,但我想要添加动画效果。
2个回答

5
您可以像这样使用ValueAnimator
ValueAnimator varl = ValueAnimator.ofInt(50);
varl.setDuration(4000);
varl.addUpdateListener(new AnimatorUpdateListener() {

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

ValueAnimator 是从 Honeycomb 开始提供的,但你可以使用 NineOldAndroids 的移植版本。


使用ActionBarSherlock版本 - com.actionbarsherlock.internal.nineoldandroids.animation.ValueAnimator - Shaunti Fondrisi

1
或者更好的办法是使用动画:

Animation animation = new Animation() {
    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t) {
        LayoutParams params = view1.getLayoutParams();
        params.leftMargin = (int)(50 * interpolatedTime);
        view1.setLayoutParams(params);
    }
};
animation.setDuration(300);
animation.setInterpolator(new OvershootInterpolator());
view1.startAnimation(animation);

或者更好的方法是,使用一个帮助器 library
ViewPropertyObjectAnimator.animate(view1).leftMargin(50).setDuration(300).start();

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