一、属性动画详解:
translationX : 指的是View距离其原始位置的距离
即,首先这个属性要有get和set方法,get方法是用来得到当前的属性值,set是用来在动画过程中设置对应属性值。其次,要知道set这个属性传入的类型。
所以,上面的如果想改变translationX来实现动画效果的话,应该这么写:
4、一些常用的可以直接用于属性动画的:
translationX:指的是View距离其原始位置的距离
X:View距离父View最左边的距离
rotation,rotationX,rotationY:这三个属性控制View对象围绕支点进行2D和3D旋转
scaleX:控制着View对象围绕它的指点进行2D缩放
pivotX:这两个属性控制着View对象的支点位置,围绕这个支点进行旋转和缩放变换处理,默认情况下,该支点的位置就是View对象的中心点
1.通过自定义一个属性类或者包装类,来间接的给这个属性增加get,set方法。
2.通过ValueAnimator来实现,这个会在下一节讲解。
1、首先明确一个概念,属性动画是通过不停的改变View的属性然后产生动画效果。所以,不像基础动画,属性动画可以真实的改变View的位置。
2、简单介绍一下translationX,translationY与 X,Y属性:translationX : 指的是View距离其原始位置的距离
X : View距离父View最左边的距离
在弄懂了属性动画是通过改变View的属性来显示动画的原理后,即ObjectAnimator是不停的set View的一个属性,即是使用java的反射机制来实现,所以,拿下面的例子:
view . setTranslationX(float);
这个View如果想改变translationX的值的话,要往里面传入一个float类型的参数。
即,首先这个属性要有get和set方法,get方法是用来得到当前的属性值,set是用来在动画过程中设置对应属性值。其次,要知道set这个属性传入的类型。
所以,上面的如果想改变translationX来实现动画效果的话,应该这么写:
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(animationBt, "translationY”,100.0);
objectAnimator.setDuration(500);
objectAnimator.start();
4、一些常用的可以直接用于属性动画的:
translationX:指的是View距离其原始位置的距离
X:View距离父View最左边的距离
rotation,rotationX,rotationY:这三个属性控制View对象围绕支点进行2D和3D旋转
scaleX:控制着View对象围绕它的指点进行2D缩放
pivotX:这两个属性控制着View对象的支点位置,围绕这个支点进行旋转和缩放变换处理,默认情况下,该支点的位置就是View对象的中心点
alpha:表示View的透明度。默认值是1(不透明),0代表完全透明(不可见)。
1.通过自定义一个属性类或者包装类,来间接的给这个属性增加get,set方法。
2.通过ValueAnimator来实现,这个会在下一节讲解。
二、属性动画组详解:
1、PropertyValuesHolder:
如果针对同一View的多个属性要做出属性动画,可以使用PropertyValuesHolder来实现;
eg:
PropertyValuesHolder holder1 = PropertyValuesHolder.ofFloat("translationX", 300);
PropertyValuesHolder holder2 = PropertyValuesHolder.ofFloat("scaleX", 1.0f, 0.1f);
PropertyValuesHolder holder3 = PropertyValuesHolder.ofFloat("scaleY", 1.0f, 0.1f);
ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(animationBt, holder1, holder2, holder3);
animator.setDuration(1000);
animator.start();
二、AnimatorSet与AnimatorSet.Builder:
PropertyValuesHolder的缺点是不能实现精确的顺序控制,而AnimatorSet可以。AnimatorSet可以通过playTogether,playSequentially,AnimatorSet.Builderd的with(),before(),after()来实现动画组合。
eg:
ObjectAnimator animator1 = ObjectAnimator.ofFloat(animationBt,"translationX",300);
animator1.setDuration(500);
ObjectAnimator animator2 = ObjectAnimator.ofFloat(animationBt,"scaleX",0.5f);
animator2.setDuration(500);
ObjectAnimator animator3 = ObjectAnimator.ofFloat(animationBt,"scaleY",0.5f);
animator3.setDuration(500);
AnimatorSet set = new AnimatorSet();
//1.按先后顺序执行动画
set.setDuration(1500);
set.playSequentially(animator1,animator2,animator3);
set.start();
//2.一起执行动画
set.setDuration(500);
set.playTogether(animator1,animator2,animator3);
set.start();
//3.先在500ms完成第一个,在一起完成第2个和第3个
set.setDuration(1000);
set.play(animator2).with(animator3);
set.play(animator1).before(animator2);
set.start();