--------------------------------------------------------------------------------------------------------------------------------------------------------------------
/*xml和上述组合动画效果一样Animator animator = AnimatorInflater.loadAnimator(context, R.animator.anim_file);animator.setTarget(view);animator.start(); <set xmlns:android="http://schemas.android.com/apk/res/android" android:ordering="sequentially" > <objectAnimator android:duration="2000" android:propertyName="translationX" android:valueFrom="-500" android:valueTo="0" android:valueType="floatType" > </objectAnimator> <set android:ordering="together" > <objectAnimator android:duration="3000" android:propertyName="rotation" android:valueFrom="0" android:valueTo="360" android:valueType="floatType" > </objectAnimator> <set android:ordering="sequentially" > <objectAnimator android:duration="1500" android:propertyName="alpha" android:valueFrom="1" android:valueTo="0" android:valueType="floatType" > </objectAnimator> <objectAnimator android:duration="1500" android:propertyName="alpha" android:valueFrom="0" android:valueTo="1" android:valueType="floatType" > </objectAnimator> </set> </set> </set> */--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//高级用法 Point point1 = new Point(0, 0); Point point2 = new Point(300, 300); ValueAnimator anim01 = ValueAnimator.ofObject(new PointEvaluator(), point1, point2); anim01.setDuration(5000); anim01.start(); //Interpolator实现非线性运动的 } class Point { private float x; private float y; public Point(float x, float y) { this.x = x; this.y = y; } public float getX() { return x; } public float getY() { return y; } } class PointEvaluator implements TypeEvaluator { @Override public Object evaluate(float fraction, Object startValue, Object endValue) { Point startPoint = (Point) startValue; Point endPoint = (Point) endValue; float x = startPoint.getX() + fraction * (endPoint.getX() - startPoint.getX()); float y = startPoint.getY() + fraction * (endPoint.getY() - startPoint.getY()); Point point = new Point(x, y); return point; } } 2、Interpolator可以实现非线性运动等 很多实现类类似于:AccelerateInterpolator就是一个加速运动的Interpolator,而DecelerateInterpolator就是一个减速运动的Interpolator。 使用属性动画时,系统默认的Interpolator其实就是一个先加速后减速的Interpolator,对应的实现类就是AccelerateDecelerateInterpolator。 调用 anim.setInterpolator(new AccelerateInterpolator(2f)); 使用不同的Interpolator private void startAnimation() { Point startPoint = new Point(getWidth() / 2, RADIUS); Point endPoint = new Point(getWidth() / 2, getHeight() - RADIUS); ValueAnimator anim = ValueAnimator.ofObject(new PointEvaluator(), startPoint, endPoint); anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { currentPoint = (Point) animation.getAnimatedValue(); invalidate(); } }); anim.setInterpolator(new AccelerateInterpolator(2f)); anim.setDuration(2500); anim.start();}
转载:
http://blog.csdn.net/guolin_blog/article/details/43536355 http://blog.csdn.net/guolin_blog/article/details/43816093 http://blog.csdn.net/guolin_blog/article/details/44171115