前言
补间动画也是由我们指定动画开始、动画结束2个关键点,中间部分的动画由系统完成。Android补间动画不改变本身执行动画view的属性,我们看到只是效果。
屏幕坐标轴
具体动画实现
透明度、旋转、位移、缩放
main/res/anim
1. 透明度
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:interpolator="@android:anim/linear_interpolator"
android:fromAlpha="1"
android:toAlpha="0"/>
AlphaAnimation a1 = (AlphaAnimation) AnimationUtils.loadAnimation(TweenActivity.this, R.anim.a_ainm);
tweenImg. startAnimation(a1);
2. 旋转
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:fillAfter="true"
android:fromDegrees="0"
android:interpolator="@android:anim/linear_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="180"/>
RotateAnimation r1 = (RotateAnimation) AnimationUtils.loadAnimation(TweenActivity.this, R.anim.r_ainm);
tweenImg.startAnimation(r1);
3. 位移
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:fromXDelta="0"
android:fromYDelta="0"
android:interpolator="@android:anim/linear_interpolator"
android:toXDelta="100%"
android:toYDelta="100%" />
TranslateAnimation t1 = (TranslateAnimation) AnimationUtils.loadAnimation(TweenActivity.this, R.anim.t_anim);
tweenImg.startAnimation(t1);
4. 缩放
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:fromXScale="1"
android:fromYScale="1"
android:interpolator="@android:anim/linear_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="2"
android:toYScale="1"/>
ScaleAnimation s1 = (ScaleAnimation) AnimationUtils.loadAnimation(TweenActivity.this, R.anim.s_ainm);
tweenImg.startAnimation(s1);
组合动画(AnimationSet)
AnimationSet是一个动画的集合
/*
* 创建一个AnimationSet,它能够同时执行多个动画效果
* 构造方法的入参如果是“true”,则代表使用默认的interpolator,如果是“false”则代表使用自定义interpolator
*/
AnimationSet animationSet = new AnimationSet(true);
/*
* 设置动画的持续时间
*/
translateAnimation.setDuration(3000);
/*
* 将四种动画效果放入同一个AnimationSet中
*/
animationSet.addAnimation(alphaAnimation);
animationSet.addAnimation(rotateAnimation);
animationSet.addAnimation(scaleAnimation);
animationSet.addAnimation(translateAnimation);
/*
* 同时执行多个动画效果
*/
view.startAnimation(animationSet);
代码中编写补间动画
TranslateAnimation t2 = new TranslateAnimation(0, tweenImg.getWidth(), 0, tweenImg.getHeight());
t2.setDuration(1000);
t2.setFillAfter(false);
t2.setInterpolator(new LinearInterpolator());
t2.setRepeatCount(1);//动画重复次数-->执行2次-->
动画监听(AnimationListener)
t2.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
//动画开始
}
@Override
public void onAnimationEnd(Animation animation) {
//动画结束
}
@Override
public void onAnimationRepeat(Animation animation) {
//动画重复
}
});
差值器(Interpolator)
什么是Interpolator?
通俗易懂的说,Interpolator负责控制动画变化的速率,使得基本的动画效果能够以匀速、加速、减速、抛物线速率等各种速率变化。
java类 | xml资源id | 说明 |
---|---|---|
AccelerateDecelerateInterpolator | @android:anim/accelerate_decelerate_interpolator | 其变化开始和结束速率较慢,中间加速 |
AccelerateInterpolator | @android:anim/accelerate_interpolator | 其变化开始速率较慢,后面加速 |
DecelerateInterpolator | @android:anim/decelerate_interpolator | 其变化开始速率较快,后面减速 |
LinearInterpolator | @android:anim/linear_interpolator | 其变化速率恒定 |
AnticipateInterpolator | @android:anim/anticipate_interpolator | 其变化开始向后甩,然后向前 |
AnticipateOvershootInterpolator | @android:anim/anticipate_overshoot_interpolator | 其变化开始向后甩,然后向前甩,过冲到目标值,最后又回到了终值 |
OvershootInterpolator | @android:anim/overshoot_interpolator | 其变化开始向前甩,过冲到目标值,最后又回到了终值 |
BounceInterpolator | @android:anim/bounce_interpolator | 其变化在结束时反弹 |
CycleInterpolator | @android:anim/cycle_interpolator | 循环播放,其速率为正弦曲线 |
TimeInterpolator | 一个接口,可以自定义插值器 |