Android自定义控件动画篇之视觉动画

Android的动画由5种类型组成:alpha,scale,translate,rotate,set

  • alpha:渐变透明度
  • scale:缩放尺寸
  • translate:画面变换位置
  • rotate:画面旋转
  • set:动画集

我们需要在res文件夹中创建anim文件夹

代码调用

 Animation animation = AnimationUtils.loadAnimation(this, R.anim.test);
 textView.startAnimation(animation);

一.文件调用

1.scale(缩放)

  • android:fromXScale:动画开始时,控件在X轴的缩放比例
  • android:toXScale:动画结束时,控件在X轴的缩放比例
  • android:fromYScale:动画开始时,控件在Y轴的缩放比例
  • android:toYScale:动画结束时,控件在Y轴的缩放比例
  • android:pivotX:缩放点X轴坐标
  • android:pivotY:缩放点Y轴坐标
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXScale="1.0"
    android:toXScale="0.4"
    android:fromYScale="1.2"
    android:toYScale="0.6"
    android:duration="700"
    android:pivotX="50"
    android:pivotY="50"
    >
</scale>

android:duration是动画时间
android:pivotX和android:pivotY都有三种取值方式,以50为例。分别有50,50%,50%p

android:pivotX="50"
android:pivotY="50"

以控件的左上角为坐标原点,向右移动50px,向下移动50px。

android:pivotX="50%"
android:pivotY="50%"

以控件的左上角为坐标原点,在原点坐标的基础上加上宽度的50%。

android:pivotX="50%p"
android:pivotY="50%p"

当取值在百分数后加上一个字母p时,表示在原点坐标的基础上加上宽度的100%。

2.alpha(透明)

  • android:fromAlpha:动画开始时的透明度,取值0.0-1.0
  • android:toAlpha:动画结束时的透明度,取值0.0-1.0
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromAlpha="1.0"
    android:toAlpha="0.1"
    android:duration="700"
    >
</alpha>

3.rotate(旋转)

  • android:fromDegrees:开始时的角度
  • android:toDegrees:结束时的角度
  • android:pivotX:旋转中心点X轴坐标
  • android:pivotY:旋转中心点Y轴坐标
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:toDegrees="-650"
    android:pivotY="50"
    android:pivotX="50"
    >
</rotate>

4.translate(平移)

  • android:fromXDelta:起始点X轴,同样有三种格式
  • android:fromYDelta:起始点Y轴
  • android:toXDelta:终点X轴
  • android:toYDelta:终点Y轴
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXDelta="0"
    android:fromYDelta="-8"
    android:toXDelta="0"
    android:toYDelta="-80">
</translate>

5.set(集合)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="700">
    <alpha
        android:fromAlpha="1.0"
        android:toAlpha="0.1" />
    <rotate
        android:fromDegrees="0"
        android:pivotX="50"
        android:pivotY="50"
        android:toDegrees="-650" />
    <scale
        android:duration="700"
        android:fromXScale="1.0"
        android:fromYScale="1.2"
        android:pivotX="50%p"
        android:pivotY="50%p"
        android:toXScale="0.4"
        android:toYScale="0.6" />
    <translate
        android:fromXDelta="0"
        android:fromYDelta="-8"
        android:toXDelta="0"
        android:toYDelta="-80" />
</set>

6.Animation属性

  • android:duration:一次动画的持续时间,以毫秒为单位
  • android:fillAfter:设置为true,动画结束时,保持状态
  • android:fillBefore:设置为true,动画结束时,恢复原来状态
  • android:fillEnabled:与android:fillBefore效果相同
  • android:repeatCount:重复动画的次数,当值为infinite时,表示无限
  • android:repeatMode:有两个值:reverse和restart。reverse表示倒放,restart表示回放。

二.代码调用

标签
alpha AlphaAnimation
scale ScaleAnimation
translate TranslateAnimation
rotate RotateAnimation
set AnimationSet
标签属性 方法
android:duration void setDuration(long durationMillis)
android:fillAfter void setFillAfter(boolean fillAfter)
android:fillBefore void setFillBefore(boolean fillBefore)
android:fillEnabled void setFillEnabled(boolean fillEnabled)
android:repeatCount void setRepeatCount(int repeatCount)
android:repeatMode void setRepeatMode(int repeatMode)

对应android:pivotX和 android:pivotY也有相应方法。

xml 代码
50 Animation.ABSOLUTE
50% Animation.RELATIVE_TO_SELF
50%p Animation.RELATIVE_TO_PARENT

Animation除了一些属性外,还有一些函数可以调用

取消动画

void cancel()

重置动画

void reset()

动画监听

animation.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {

            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });

三.插值器

当我们定义一个动画时,我们可以通过插值器改变动画的速度。

XML
AccelerateDecelerateInterpolator @android:anim/accelerate_decelerate_interpolator
AccelerateInterpolator @android:anim/accelerate_interpolator
AnticipateInterpolator @android:anim/anticipate_interpolator
AnticipateOvershootInterpolator @android:anim/anticipate_overshoot_interpolator
BounceInterpolator @android:anim/bounce_interpolator
CycleInterpolator @android:anim/cycle_interpolator
DecelerateInterpolator @android:anim/decelerate_interpolator
LinearInterpolator @android:anim/linear_interpolator
OvershootInterpolator @android:anim/overshoot_interpolator
意思
AccelerateDecelerateInterpolator 加速减速插值器 ,在动画中间加速
AccelerateInterpolator 加速插值器,在动画开始后加速
AnticipateInterpolator 初始偏移插值器,动画开始时向前偏移一段距离,然后应用动画
AnticipateOvershootInterpolator 是 AnticipateInterpolator与OvershootInterpolator 的结合
BounceInterpolator 弹跳插值器,模拟控件*落地后回弹的效果
CycleInterpolator 循环插值器,动画想你换特定次数,速率沿正弦曲线改变
DecelerateInterpolator 减速插值器,在动画开始后减速
LinearInterpolator 线性插值器,匀速加速
OvershootInterpolator 结束偏移插值器,在动画结束时,沿动画方向继续运动一段时间,在结束动画

调用的方法有两种
XML调用

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromAlpha="1.0"
    android:toAlpha="0.1"
    android:duration="700"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator "
    >
</alpha>

代码调用

 animation.setInterpolator(new AccelerateDecelerateInterpolator());
上一篇:layui.mobile.css


下一篇:Android初学 动画