package roman10.tutorial.propertyanimation.valueanimator; import roman10.tutorial.propertyanimation.R; import roman10.tutorial.propertyanimation.Utils; import com.nineoldandroids.animation.PropertyValuesHolder; import com.nineoldandroids.animation.ValueAnimator; import com.nineoldandroids.view.animation.AnimatorProxy; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.FrameLayout; import android.widget.ImageView; public class ValueAnimatorDemo extends Activity implements ValueAnimator.AnimatorUpdateListener { private AnimatorProxy mImageAnimatorProxy; private ImageView mImageView; private float mOriX, mOriY; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_value_animator); mImageView = (ImageView) this.findViewById(R.id.image); mImageAnimatorProxy = AnimatorProxy.wrap(mImageView); final FrameLayout container = (FrameLayout) this.findViewById(R.id.container); final Button mBtnStart = (Button) this.findViewById(R.id.btnStart); mBtnStart.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mOriX = mImageAnimatorProxy.getX(); mOriY = mImageAnimatorProxy.getY(); PropertyValuesHolder widthPropertyHolder = PropertyValuesHolder.ofFloat("posX", mImageAnimatorProxy.getX(), container.getWidth() - mImageView.getWidth()); PropertyValuesHolder heightPropertyHolder = PropertyValuesHolder.ofFloat("posY", mImageAnimatorProxy.getY(), 0); ValueAnimator mTranslationAnimator = ValueAnimator.ofPropertyValuesHolder(widthPropertyHolder, heightPropertyHolder); mTranslationAnimator.addUpdateListener(ValueAnimatorDemo.this); mTranslationAnimator.setDuration(1000); mTranslationAnimator.start(); mBtnStart.setEnabled(false); } }); Button mBtnReset = (Button) this.findViewById(R.id.btnReset); mBtnReset.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mBtnStart.setEnabled(true); mImageAnimatorProxy.setX(mOriX); mImageAnimatorProxy.setY(mOriY); } }); } @Override public void onAnimationUpdate(ValueAnimator arg0) { float posX = (Float) arg0.getAnimatedValue("posX"); float posY = (Float) arg0.getAnimatedValue("posY"); mImageAnimatorProxy.setX(posX); mImageAnimatorProxy.setY(posY); } }