package roman10.tutorial.propertyanimation.valueanimator; import roman10.tutorial.propertyanimation.R; import roman10.tutorial.propertyanimation.Utils; import com.nineoldandroids.animation.TypeEvaluator; 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 ValueAnimatorDemo2 extends Activity implements ValueAnimator.AnimatorUpdateListener { private AnimatorProxy mImageAnimatorProxy; private float mOriX, mOriY; private class Position { private float posX; private float posY; public float getPosX() { return posX; } public float getPosY() { return posY; } Position(float pPosX, float pPosY) { posX = pPosX; posY = pPosY; } } private class PositionTypeEvaluator implements TypeEvaluator<Position> { @Override public Position evaluate(float fraction, Position startValue, Position endValue) { float posX = startValue.getPosX() + (endValue.getPosX() - startValue.getPosX()) * fraction; float posY = startValue.getPosY() + (endValue.getPosY() - startValue.getPosY()) * fraction; return new Position(posX, posY); } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_value_animator); final ImageView 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(); ValueAnimator mAnimator = ValueAnimator.ofObject(new PositionTypeEvaluator(), new Position(mOriX, mOriY), new Position(container.getWidth() - mImageView.getWidth(), 0)); mAnimator.addUpdateListener(ValueAnimatorDemo2.this); mAnimator.setDuration(1000); mAnimator.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 pAnimator) { Position currentPos = (Position) pAnimator.getAnimatedValue(); mImageAnimatorProxy.setX(currentPos.getPosX()); mImageAnimatorProxy.setY(currentPos.getPosY()); } }