Android 属性动画三剑客

TypeEvaluator

TypeEvaluator<T> interface 计算类型值 支持泛型

     方法:T evaluate(float fraction, T startValue, T endValue)

   就是用来计算属性值的,即可计算任意类型的值。

   fraction 表示时间的比率。

   实现类有: ArgbEvaluator ARGB颜色计算器

   FloatEvaluator float型计算器

   IntEvaluator int计算器

Interpolator

TimeInterpolator 时间插入器 接口,反应动画的运动速率。getInterpolation()根据一定算法,返回时间比率

   Interpolator interface 继承自TimeInterpolator

AnimatorUpdateListener

onAnimationUpdate(ValueAnimator animation) {
    value = ()animation.getAnimatedValue();//此即为计算器和时间插值器计算结果值
}

 复杂写法TypeEvaluator

	@Override
	public void closeMenu() {
		FuzeLog.d(TAG, "closeMenu");
		final ViewGroup.LayoutParams params = (ViewGroup.LayoutParams)themeGridView.getLayoutParams();
		ViewProperty start = new ViewProperty();
		start.scaleX = 1;
		start.scaleY = 1;
		start.TransX = 0;
		start.TransY = 0;
		ViewProperty end = new ViewProperty();
		end.scaleX = 1.25f;
		end.scaleY = 1.25f;
		end.TransX = -236;//221-(599-1142*0.125)
		end.TransY = 68;//115-(161-919*0.125)
		ValueAnimator anim = ValueAnimator.ofObject(viewEvaluator,start,end);//ValueAnimator.ofFloat(1,1.25f);
		anim.setDuration(300);
		anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
			
			@Override
			public void onAnimationUpdate(ValueAnimator animation) {
				ViewProperty value = (ViewProperty)animation.getAnimatedValue();
				themeGridView.setScaleX(value.scaleX);
				themeGridView.setScaleY(value.scaleY);
				themeGridView.setTranslationX(value.TransX);
				themeGridView.setTranslationY(value.TransY);
				
			}
		});
		
		
		
		anim.addListener(new Animator.AnimatorListener() {
			
			@Override
			public void onAnimationStart(Animator animation) {
				params.height = 770;//965/1.25
			}
			
			@Override
			public void onAnimationRepeat(Animator animation) {
				
			}
			
			@Override
			public void onAnimationEnd(Animator animation) {
			}
			
			@Override
			public void onAnimationCancel(Animator animation) {
			}
		});
		anim.start();
		
	}
	
	class ViewProperty{
		float scaleX;
		float scaleY;
		int TransX;
		int TransY;
	}
	
	private  TypeEvaluator<ViewProperty>  viewEvaluator = new TypeEvaluator<ViewProperty>() {
		
		@Override
		public ViewProperty evaluate(float fraction, ViewProperty startValue,
				ViewProperty endValue) {
			float cScaleX =startValue.scaleX + (endValue.scaleX - startValue.scaleX)*fraction;
			float cScaleY =startValue.scaleY + (endValue.scaleY - startValue.scaleY)*fraction;
			int cTransX = startValue.TransX + (int)((endValue.TransX - startValue.TransX)*fraction);
			int cTransY = startValue.TransY + (int)((endValue.TransY - startValue.TransY)*fraction);
			ViewProperty cVP = new ViewProperty();
			cVP.scaleX = cScaleX;
			cVP.scaleY = cScaleY;
			cVP.TransX = cTransX;
			cVP.TransY = cTransY;
			return cVP;
		}
	};
	





你可能感兴趣的:(Android 属性动画三剑客)