MainActivity如下:
package cc.cn; import android.animation.ValueAnimator; import android.animation.ValueAnimator.AnimatorUpdateListener; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup.MarginLayoutParams; import android.widget.Button; /** * Demo描述: * 属性动画中ValueAnimator使用实例 * 利用ValueAnimator使控件发生位移(变化Margin值) * * ValueAnimator是Property Animation很重要的一个类 * ValueAnimator可跟踪记录对象属性已经变化的时间及当前这个时间点的值 * * 参考资料: * 1 http://blog.csdn.net/linmiansheng/article/details/18716841 * 2 http://blog.csdn.net/linmiansheng/article/details/18763987 * 3 关于属性动画的中文文档,请参见: * http://blog.csdn.net/think_soft/article/details/7703684 * http://wiki.eoeandroid.com/Property_Animation * Thank you very much * */ public class MainActivity extends Activity { private Button mValueAnimatorButton; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); init(); } private void init(){ mValueAnimatorButton=(Button) findViewById(R.id.valueAnimatorButton); //ValueAnimator.ofInt(int,int)设定了值的变化范围 final ValueAnimator valueAnimator=ValueAnimator.ofInt(20,100); //利用AnimatorUpdateListener监听动画的执行 valueAnimator.addUpdateListener(new AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator va) { //得到动画当前执行的值 //这些值均在(20,100)之间 Integer animatedValue = (Integer)va.getAnimatedValue(); System.out.println("animatedValue="+animatedValue); MarginLayoutParams marginLayoutParams = (MarginLayoutParams) mValueAnimatorButton.getLayoutParams(); marginLayoutParams.leftMargin = animatedValue; //不断修改Button的Margin值 mValueAnimatorButton.setLayoutParams(marginLayoutParams); } }); valueAnimator.setDuration(2000); //valueAnimator.setRepeatCount(1); //valueAnimator.setRepeatMode(ValueAnimator.REVERSE); valueAnimator.setTarget(mValueAnimatorButton); mValueAnimatorButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { valueAnimator.start(); } }); } }
main.xml如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/valueAnimatorButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="ValueAnimatorButton" /> </LinearLayout>