- Tween animation补间动画,主要是通过对控件实现透明度(alpha)、尺寸(scale)、位置(translate)、旋转rotate)进行改变,通过集合(set)的方式,实现连续的动画效果
- Frame animation
Tween动画
1、直接子类
- AlphaAnimation;控制一个对象的透明度播放的动画
- RotateAnimation;控制一个对象旋转的动画
- ScaleAnimation;控制一个对象尺寸的动画
- TranslateAnimation;控制一个对象位置的动画
2、监听器
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
3、属性及其对应方法(所有子类都拥有)
android:detachWallpaper: 是否在壁纸上运行
android:duration: 动画时长,单位毫秒。
android:fillAfter: 设置为true,控件动画结束时将保持动画最后一帧(xml文件中,需要设置在set便签才生效)。
android:fillBefore: 设置为true,控件动画结束时将保持动画开始第一帧(感觉很坑爹,设置true和false还有删除这个属性,效果都一样)。
android:fillEnabled: 效果和fillBefore一样(同样坑爹,经测试这个属性可有可无,求打脸。
android:interpolator: 插值器。设置动画速率的变化(譬如加速、减速、匀速等),后面详说。
android:repeatCount: 动画重复次数
ndroid:repeatMode: 重复模式,有reverse(倒序)和restart(重复)两种,必须配合repeatCount一起使用
android:startOffset: 延迟一定毫秒之后才开始动画
-
android:zAdjustment: 表示被设置动画的内容在动画运行时在Z轴上的位置,有以下三个值
- normal 默认值,保持内容在Z轴上的位置不变
- top 保持在Z周最上层
- bottom 保持在Z轴最下层
4、Interpolator
主要实现动画的速率变化,interpolator作为一个接口,然后抽象类BaseInterpolator实现Interpolator接口,在BaseInterpolator的子类就是android一系列Android提供的插值器。
用法:
- 在XML的标签下设置:android:interpolator=”@android:anim/accelerate_decelerate_interpolator”
- 在JAVA代码中使用:animation.setInterpolator(new AccelerateDecelerateInterpolator());
以下提供android 所有的插值器
- AccelerateDecelerateInterpolator:开始和结束速度慢,中间部分加速
- AccelerateInterpolator:开始缓慢,然后加速
- AnticipateInterpolator:开始后退,然后前进
- AnticipateOvershootInterpolator:开始后退,然后前进,直到超出目标值,再后退至目标值
- BounceInterpolator:在结束时弹跳
- CycleInterpolator:在指定的周期内重复动画,速度变化遵循正弦规律
- DecelerateInterpolator:开始加速,结束缓慢
- LinearInterpolator:匀速
- OvershootInterpolator:前进,直到超出目标值,再后退至目标值
- PathInterpolator: 根据路劲变化改变速率
5、AnimationSet
在res/anim/.xml文件下实现多种动画(透明度、尺寸、位置、旋转)
6、相关代码实现
-
java代码实现动画
private void alpha() { AlphaAnimation alphaAnimation = new AlphaAnimation(1.0f, 0.0f); alphaAnimation.setDuration(2000); alphaAnimation.setFillAfter(true); imv.setAnimation(alphaAnimation); //imv.startAnimation(alphaAnimation); } private void rote() { RotateAnimation rotateAnimation = new RotateAnimation(0, 720f); rotateAnimation.setDuration(2000); rotateAnimation.setFillAfter(true); imv2.setAnimation(rotateAnimation); } private void scale() { ScaleAnimation scaleAnimation = new ScaleAnimation(0f, 2f, 0f, 3f); scaleAnimation.setDuration(3000); scaleAnimation.setFillAfter(true); imv.setAnimation(scaleAnimation); } private void translate() { TranslateAnimation animation = new TranslateAnimation(0f, 200f, 0f, 300f); animation.setDuration(3000); animation.setFillAfter(true); imv.setAnimation(animation); }
-
xml实现动画
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:fillAfter="true" android:shareInterpolator="false"> <scale android:duration="1500" android:fromXScale="1.0" android:fromYScale="1.0" android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:pivotX="50%" android:pivotY="50%" android:toXScale="1.5" android:toYScale="0.5" /> <set android:duration="2000" android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:startOffset="1500"> <scale android:duration="1500" android:fromXScale="1.5" android:fromYScale="0.6" android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:pivotX="50%" android:pivotY="50%" android:toXScale="0.0" android:toYScale="0.0" /> <rotate android:fromDegrees="0.0" android:pivotX="50%" android:pivotY="50%" android:toDegrees="-45" /> </set> </set>
java中引用res文件
private void animationSet(){
Animation animation = AnimationUtils.loadAnimation(getActivity(), R.anim.animation_set);
imv.startAnimation(animation);
}