Android——View动画

补间动画

  • 渐变
  • 缩放
  • 平移
  • 旋转
Java类 XML标签 效果
AlphaAnimation alpha 让透明度渐变
ScaleAnimation scale 放大或缩小
TranslateAnimation translate 移动位置
RotateAnimation rotate 绕某一点旋转

两种使用方式

  • 第一种:

1、在res中新建anim文件夹,创建xml动画文件,如:res/anim/anim_test.xml
2、在java文件中用这个xml文件生成Animation类
3、调用View的startAnimation来启动动画

  • 第二种:

直接在Java文件中new一个 Animation 的子类,然后调用View的startAnimation启动动画

final RotateAnimation animation = new RotateAnimation(0, 180, 50, 50);
animation.setDuration(2000);

btnRun.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        ivIc.startAnimation(animation);
    }
});

一般推荐使用XML来写补间动画,有以下好处

  • xml文件以配置的形式,让动画看起来更直观,可读性强
  • 一个动画文件可以被多个View使用,重用性强
  • 便于更换动画,更换一个View的动画只要更换load的xml文件就行

Animation的属性

四个子类独有的属性不多,大部分是继承父类Animation的,所以先看Animation的属性

Animation的属性 含义
android:detachWallpaper 针对Window的动画属性。当一个window在桌面上动画时,是否让桌面壁纸跟着动画,默认是false
android:duration 动画执行的时间
android:fillAfter 如果为true,那么动画执行完就会定格在执行完的那个画面,不会恢复到原位
android:interpolator 设置插值器,来控制动画在不同时间段的速度。默认是加速减速插值器
android:repeatCount 动画重复的次数,所以总共会运行的动画次数是这个重复次数+1
android:repeatMode 动画重复的方式,有两个值,reverse和restart。reverse表示动画会正反轮流执行,restart会正方向一直执行
android:startOffset 动画延迟执行的时间,单位是毫秒
android:zAdjustment 可以取三个值,normal:0,top:1,bottom:-1.代表可以在动画过程中调整z轴的顺序。

AlphaAnimation的独有属性

AlphaAnimation的独有属性 含义
android:fromAlpha 动画开始时的透明度,从0-1,0表示完全透明,1表示完全不透明
android:toAlpha 动画结束时的透明度

5秒从全透明变成完全不透明

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="5000">
    <alpha
        android:fromAlpha="0"
        andorid:toAlpha />
</set>

ScaleAnimation的独有属性

ScaleAnimation的独有属性 含义
android:pivotX 缩放原点的x轴坐标,缩放围绕这个点运行,默认是View的左上角(0, 0)
android:pivotY 缩放原点的y轴坐标,XML中的值有三种写法,数值:50;百分数:50%;百分数p:50%p。如果是数值,表示以View的左上角为(0, 0),然后加上数值,以这个点为缩放中心。如果是百分数,表示加上自身高度的50%,作为所放电。如果是百分数p,如50%p,表示加上父控件高度的50%,作为所放电
android:fromXScale 动画开始时,X轴上缩放的比例。1表示本身大小
android:fromYScale 动画开始时,Y轴上缩放的比例。1表示本身大小
android:toXScale 动画结束时,X轴上缩放的比例。1表示本身大小
android:toYScale 动画结束时,Y轴上缩放的比例。1表示本身大小

从图片的右下角缩放,宽高各从原来的2倍缩放到原来的十分之一

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="3000">
    <scale
        android:pivotX="100%"
        andorid:pivotY="100%"
        andorid:fromXScale="2"
        android:fromYScale="2"
        android:toXScale="0.1"
        android:toYScale="0.1" />
</set>

TranslateAnimation的独有属性

TranslateAnimation的独有属性 含义
android:fromXDelta 动画开始时,View左上角的X坐标,也有三种写法,同pivotX
android:fromYDelta 动画开始时,View左上角的Y坐标,也有三种写法,同pivotX
android:toXDelta 动画结束时,View左上角的X坐标,也有三种写法,同pivotX
android:toYDelta 动画结束时,View左上角的Y坐标,也有三种写法,同pivotX

从自身的左上角移到自身的右下角

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="3000">
    <translate
        andorid:fromXDelta="-100%"
        android:fromYDelta="-100%"
        android:toXDelta="100%"
        android:toYDelta="100%" />
</set>

RotateAnimation的独有属性

RotateAnimation的独有属性 含义
android:pivotX 旋转动画的中心的X坐标,旋转围绕这个点进行,也有三种写法
android:pivotY 旋转动画的中心的Y坐标,旋转围绕这个点进行,也有三种写法
android:fromDegrees 动画开始时的旋转角度,顺序针转增加,逆时针转减少,360度为一圈
android:toDegrees 动画结束时的旋转角度

从360度转到-90度

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="3000">
    <rotate
        andorid:pivotX="50%"
        android:pivotY="50%"
        android:fromDegrees="360"
        android:toDegrees="-90" />
</set>

组合动画

旋转的同时,改变透明度

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="3000">
    <rotate
        andorid:pivotX="50%"
        android:pivotY="50%"
        android:fromDegrees="360"
        android:toDegrees="-90" />
    <alpha
        android:fromAlpha="1"
        android:toAlpha="0.2" />
</set>

插值器

AnimationSet(动画集合类)可以设置集合中的动画是否共享同一个插值器

//true or false
android:shareInterpolator

扫描二维码关注公众号,回复: 4078696 查看本文章

Interpolator

Interpolator继承自 TimeInterpolator ,用来定义动画在不同的时间有不同的速度,也叫插补器。
插值器可以在xml文件中用 android:interpolator 设置,也可以在java中通过 animation.setInterpolator 来设置
在java中设置可以传一些参数,对插值器进行更详细的设置,比较灵活。

插值器 XML中的值 作用
AccelerateDecelerateInterpolator @android:anim/accelerate_decelerate_interpolator 加速减速插值器,动画先加速,再减速
AccelerateInterpolator @android:anim/accelerate_interpolator 加速插值器
DecelerateInterpolator @android:anim/decelerate_interpolator 减速插值器
BounceInterpolator @android:anim/bounce_interpolator 回弹插值器,动画结束会回弹几下
CycleInterpolator @android:anim/cycle_interpolator 圆插值器,动画会重复几次,速度沿着正弦曲线变化
LinearInterpolator @android:anim/linear_interpolator 线性插值器,保持匀速
AnticipateOvershootInterpolator @android:anim/anticipate_overshoot_interpolator 预期超调插值器,动画开始时往前甩一下,动画结束时往后甩一下
AnticipateInterpolator @android:anim/anticipate_interpolator 预期插值器,动画开始时会往前甩一下
OvershootInterpolator @android:anim/overshoot_interpolator 超调插值器,动画结束时往后甩一下

对View动画的监听

AnimationListener提供对动画开始,重复和结束的监听

animation.setAnimationListener(new Animation.AnimationListener(){
    @Override
    public void onAnimationStart(Animation animation) {
        Log.i(TAG, "动画开始时的操作");
    }
    
    @Override
    public void onAnimationRepeat(Animation animation) {
        Log.i(TAG, "动画重复时的操作");
    }
    
    @Override
    public void onAnimationEnd(Animation animation) {
        Log.i(TAG, "动画结束时的操作");
    }
});

猜你喜欢

转载自blog.csdn.net/weixin_42164949/article/details/84068927