其他分享
首页 > 其他分享> > Android 补间动画

Android 补间动画

作者:互联网

文章目录

补间动画

概述

补间动画指定义动画开始样式和结束样式,而动画变化的“中间帧”则有系统计算补齐。

补间动画分类

公用属性方法说明

XML属性

android:duration:动画持续时间(ms),必须设置,动画才有效果
android:startOffset:动画延迟开始时间(ms)
android:fillBefore:动画播放完后,视图是否会停留在动画开始的状态,默认为true
android:fillAfter:动画播放完后,视图是否会停留在动画结束的状态,优先于fillBefore值,默认为false
android:fillEnabled:是否应用fillBefore值,对fillAfter值无影响,默认为true

Java属性

setStartOffset(long startOffset):设置开始的延迟的时间(单位ms)
setFillBefore(boolean fillBefore):设置最终是否固定在起始状态
setFillAfter(boolean fillAfter):设置最终是否固定在最后的状态
setAnimationListener(AnimationListener listener):设置动画监听
view.startAnimation(animation):开始
view.clearAnimation(aniamtion):清除

数值设置说明:

平移动画 TranslateAnimation

属性说明

fromXDelta/fromYDelta:动画开始X/Y坐标
toXDelta/toYDelta:动画结束X/Y坐标

XML实现

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:duration="2000">
    <translate
               android:fromXDelta="0"
               android:fromYDelta="0"
               android:toXDelta="100%"
               android:toYDelta="100%" />
</set>
Animation animation = AnimationUtils.loadAnimation(context, R.anim.anim_translate);
logo.startAnimation(animation);

Java实现

TranslateAnimation animation = new TranslateAnimation(
    Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 1f,
    Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 1f
);
animation.setDuration(2000);
logo.startAnimation(animation);

缩放动画 ScaleAnimation

属性说明

fromXScale/fromYScale:开始缩放比例
toXScale/fromYScale:结束缩放比例
pivotX/pivotY:缩放的中心点坐标

XML实现

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:duration="2000"
     android:fillAfter="true">
    <scale
           android:fromXScale="0.5"
           android:fromYScale="0.5"
           android:pivotX="50%"
           android:pivotY="50%"
           android:toXScale="1.5"
           android:toYScale="1.5" />
</set>
Animation animation = AnimationUtils.loadAnimation(context, R.anim.anim_scale);
logo.startAnimation(animation);

Java实现

ScaleAnimation animation = new ScaleAnimation(
    0.5f, 1.5f, 0.5f, 1.5f,
    Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f
);
animation.setDuration(2000);
logo.startAnimation(animation);

旋转动画 RotateAnimation

属性说明

fromDegress/toDegress:旋转的开始/结束角度
repeatCount:旋转次数,默认为0,代表一次;设置其他值如3,则表示旋转4次;值为-1,则表示一直旋转
repeatMode:设置重复模式,默认为retart,当repeatCount大于0时,可以设置为reverse表示反方向动画

XML实现

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:duration="2000"
     android:fillAfter="true">
    <rotate
            android:fromDegrees="0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:repeatCount="3"
            android:toDegrees="360" />
</set>
Animation animation = AnimationUtils.loadAnimation(context, R.anim.anim_rotate);
logo.startAnimation(animation);

Java实现

RotateAnimation animation = new RotateAnimation(
    0, 360f,
    Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 05f
);
animation.setRepeatCount(3);
animation.setDuration(2000);
logo.startAnimation(animation);

透明动画 AlphaAnimation

属性说明

fromAlpha/toAlpha:开始/结束透明度
透明度范围:0-1

XML实现

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:duration="2000"
     android:fillAfter="true">
    <alpha
           android:fromAlpha="1.0"
           android:toAlpha="0.1" />
</set>
Animation animation = AnimationUtils.loadAnimation(context, R.anim.anim_alpha);
logo.startAnimation(animation);

Java实现

AlphaAnimation animation = new AlphaAnimation(1.0f, 0.1f);
animation.setDuration(2000);
logo.startAnimation(animation);

组合动画 AnimationSet

XML实现

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:duration="2000"
     android:fillAfter="true">
    <alpha
           android:fromAlpha="1.0"
           android:toAlpha="0.1" />
    <rotate
            android:fromDegrees="0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:repeatCount="3"
            android:toDegrees="360" />
    <scale
           android:fromXScale="0.5"
           android:fromYScale="0.5"
           android:pivotX="50%"
           android:pivotY="50%"
           android:toXScale="1.5"
           android:toYScale="1.5" />
    <translate
               android:fromXDelta="0"
               android:fromYDelta="0"
               android:toXDelta="100%"
               android:toYDelta="100%" />
</set>
logo.clearAnimation();
Animation animation = AnimationUtils.loadAnimation(context, R.anim.anim_set);
logo.setAnimation(animation);

Java实现

AnimationSet animationSet = new AnimationSet(false);
ScaleAnimation anim1 = new ScaleAnimation(
    0f, 1f, 0f, 1f,
    Animation.RELATIVE_TO_SELF, 0.5f,
    Animation.RELATIVE_TO_SELF, 0.5f);
RotateAnimation anim2 = new RotateAnimation(
    0f, 360f,
    Animation.RELATIVE_TO_SELF, 0.5f,
    Animation.RELATIVE_TO_SELF, 0.5f);
AlphaAnimation anim3 = new AlphaAnimation(0f, 1f);
animationSet.addAnimation(anim1);
animationSet.addAnimation(anim2);
animationSet.addAnimation(anim3);
animationSet.setDuration(2000);
logo.startAnimation(animationSet);

Interpolator

来控制动画的变化速度,而Android中已经为我们提供了五个可供选择的实现类

监听动画状态

代码下载

标签:动画,SELF,RELATIVE,animation,logo,补间,Android,Animation
来源: https://blog.csdn.net/qq_14876133/article/details/113755998