1、概述
Android框架提供了两种动画系统:属性动画和视图动画。这两种动画系统都有变化的选择,但是总的来说,属性动画系统是更好的选择,因为它更加灵活,并提供了更多的特性。
属性动画系统是一个强大的框架,它允许你动画几乎所有的东西。例如一个对象在屏幕中的位置,要动画多久,和动画之间的距值。
通常我们要操作的属性为:
rotationX、rotationY 旋转(以x轴或y轴)
scaleX、scaleY 缩放
translationX、translationY 平移
X、Y 坐标
alpha 透明度
1、ObjectAnimator(针对于某个组件)
单个动画:
ObjectAnimator.ofFloat(v,"rotationX",0.0f,360.0f).setDuration(5000).start();//这里是图片围绕x轴进行旋转
组合多个动画:
PropertyValuesHolder propertyValuesHolder = PropertyValuesHolder.ofFloat("alpha",1f,0f,1f);
PropertyValuesHolder propertyValuesHolder1 = PropertyValuesHolder.ofFloat("scaleX",1f,0f,1f); PropertyValuesHolder propertyValuesHolder2 = PropertyValuesHolder.ofFloat("scaleY",1f,0f,1f);
ObjectAnimator.ofPropertyValuesHolder(v,propertyValuesHolder,propertyValuesHolder1,propertyValuesHolder2).setDuration(3000).start();
//这里的动画是一个图片的缩放,同时伴随着alpha的变化。注意这里使用的是PropertyValuesHolder来添加动画。
2、ValueAnimator(不针对于某有一个组件)
和ObjectAnimator用法很类似,简单看一下用view垂直移动的动画代码:
自由落体示例:
final View view = v;
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
//定义一个动画
ValueAnimator valueAnimator = ValueAnimator.ofFloat(view.getY(),displayMetrics.heightPixels).setDuration(500);
//监听动画的每一个动作
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
view.setTranslationY((Float) animation.getAnimatedValue());
}
});
valueAnimator.start();