Android里面动画实现方式主要分为三种:
1.Tween动画
主要是改变控件的旋转,平移,缩放,透明度,但是也就这些效果了
2.帧动画
逐帧播放图片实现动画,缺点图片资源多,体积大
3.属性动画(Property Animation)
理论上只要是View的属性,基本都可以改变,比Tween动画更强大。什么变色啊,3D旋转(Z轴)。
属性动画的代码实现比较简单:
单个动画
ObjectAnimator animator = ObjectAnimator.ofFloat(textview, "alpha", 1f, 0f, 1f);
animator.setDuration(5000);
animator.start();
组合动画
AnimatorSet animatorSet = new AnimatorSet();
//移动
ObjectAnimator ty = ObjectAnimator.ofFloat(btn, "translationY", 0,300);
ty.setDuration(1000);
//旋转
ObjectAnimator ry = ObjectAnimator.ofFloat(btn, "rotationY", 0,1080);
ry.setDuration(1500);
//透明度
ObjectAnimator alpha = ObjectAnimator.ofFloat(btn, "alpha", 1,0,0.5f,1);
alpha.setDuration(2000);
//缩放
ObjectAnimator sx = ObjectAnimator.ofFloat(btn, "scaleX", 1,0.5f);
alpha.setDuration(1000);
//一起播放
// animatorSet.playTogether(items);
animatorSet.play(ry).with(sx).after(ty).before(alpha);
animatorSet.start();
属性动画的xml实现:
示例:
<set>
<objectAnimator
android:propertyName="x"
android:duration="500"
android:valueTo="400"
android:valueType="intType"/>
<objectAnimator
android:propertyName="y"
android:duration="500"
android:valueTo="300"
android:valueType="intType"/>
</set>
<objectAnimator
android:propertyName="alpha"
android:duration="500"
android:valueTo="1f"/>
属性解释:
<set
android:ordering=["together" | "sequentially"]>
<objectAnimator
android:propertyName="string"
android:duration="int"
android:valueFrom="float | int | color"
android:valueTo="float | int | color"
android:startOffset="int"
android:repeatCount="int"
android:repeatMode=["repeat" | "reverse"]
android:valueType=["intType" | "floatType"]/>
</set>
android:ordering
指定集合中动画播放的顺序。
android:propertyName
属性名称,例如一个view对象的”alpha”和”backgroundColor”。
android:valueFrom
变化开始值
android:valueTo
变化结束值
android:valueType
变化值类型
它有两种值:intType和floatType,第二种为默认值
android:duration
持续时间
android:startOffset
动画开始延迟时间
android:repeatCount
重复次数,-1表示无限重复
android:repeatMode
重复模式,前提是android:repeatCount为-1
它有两种值:”reverse”和”repeat”,第一个表示反向重复,第二个为顺序重复。