Android初学 动画

参考资源:
Android 动画总结


1. 帧动画

即按照顺序播放一系列图片实现的动画效果。

效果图:
Android初学 动画
Android初学 动画
实现方式:

  1. drawable目录下创建三个位图,是三个要播放的图片

a_0.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="24dp"
        android:height="24dp"
        android:viewportWidth="24"
        android:viewportHeight="24">
    <path
        android:pathData="M17.6,11.48 L19.44,8.3a0.63,0.63 0,0 0,-1.09 -0.63l-1.88,3.24a11.43,11.43 0,0 0,-8.94 0L5.65,7.67a0.63,0.63 0,0 0,-1.09 0.63L6.4,11.48A10.81,10.81 0,0 0,1 20L23,20A10.81,10.81 0,0 0,17.6 11.48ZM7,17.25A1.25,1.25 0,1 1,8.25 16,1.25 1.25,0 0,1 7,17.25ZM17,17.25A1.25,1.25 0,1 1,18.25 16,1.25 1.25,0 0,1 17,17.25Z"
        android:fillColor="#FF000000"/>
</vector>

a_1.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="24"
    android:viewportHeight="24"
    android:tint="?attr/colorControlNormal">
  <path
      android:fillColor="@android:color/white"
      android:pathData="M5,16c0,3.87 3.13,7 7,7s7,-3.13 7,-7v-4L5,12v4zM16.12,4.37l2.1,-2.1 -0.82,-0.83 -2.3,2.31C14.16,3.28 13.12,3 12,3s-2.16,0.28 -3.09,0.75L6.6,1.44l-0.82,0.83 2.1,2.1C6.14,5.64 5,7.68 5,10v1h14v-1c0,-2.32 -1.14,-4.36 -2.88,-5.63zM9,9c-0.55,0 -1,-0.45 -1,-1s0.45,-1 1,-1 1,0.45 1,1 -0.45,1 -1,1zM15,9c-0.55,0 -1,-0.45 -1,-1s0.45,-1 1,-1 1,0.45 1,1 -0.45,1 -1,1z"/>
</vector>

a_2.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="24dp"
        android:height="24dp"
        android:viewportWidth="24"
        android:viewportHeight="24"
        android:tint="?attr/colorControlNormal">
    <path
        android:pathData="M17.6,11.48 L19.44,8.3a0.63,0.63 0,0 0,-1.09 -0.63l-1.88,3.24a11.43,11.43 0,0 0,-8.94 0L5.65,7.67a0.63,0.63 0,0 0,-1.09 0.63L6.4,11.48A10.81,10.81 0,0 0,1 20L23,20A10.81,10.81 0,0 0,17.6 11.48ZM7,17.25A1.25,1.25 0,1 1,8.25 16,1.25 1.25,0 0,1 7,17.25ZM17,17.25A1.25,1.25 0,1 1,18.25 16,1.25 1.25,0 0,1 17,17.25Z"
        android:fillColor="@android:color/white"/>
</vector>
  1. drawable目录下创建anim1.xml文件,用来设置图片的展示顺序以及duration(持续时间)
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@drawable/a_0"
        android:duration="100" />
    <item
        android:drawable="@drawable/a_1"
        android:duration="300" />
    <item
        android:drawable="@drawable/a_2"
        android:duration="100" />
</animation-list>
  1. 在布局文件activity_main.xml中添加ImageView组件,用来显示动画
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/animation1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
  1. 在java代码中设置动画
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ImageView animationImg1 = findViewById(R.id.animation1);
        animationImg1.setImageResource(R.drawable.anim1);
        AnimationDrawable animationDrawable1 = (AnimationDrawable) animationImg1.getDrawable();
        animationDrawable1.start();
    }
}

2. 补间动画

补间动画(Tween),和前面学的帧动画不同,帧动画 是通过连续播放图片来模拟动画效果,而补间动画开发者只需指定动画开始,以及动画结束"关键帧", 而动画变化的"中间帧"则由系统计算并补齐!
Andoird所支持的补间动画效果有如下这四种,分别为:

  1. AlphaAnimation:透明度渐变效果,创建时指定开始以及结束透明度,还有动画的持续时间,透明度的变化范围[0, 1],0是完全透明,1是完全不透明;对应alpha标签!
  2. ScaleAnimation:缩放渐变效果,创建时需指定开始以及结束的缩放比,以及缩放参考点, 还有动画的持续时间;对应scale标签!
  3. TranslateAnimation:位移渐变效果,创建时指定起始以及结束位置,并指定动画的持续 时间即可;对应translate标签!
  4. RotateAnimation:旋转渐变效果,创建时指定动画起始以及结束的旋转角度,以及动画 持续时间和旋转的轴心;对应rotate标签!

AlphaAnimation:透明度动画(用来实现透明度渐变效果)

效果图:
Android初学 动画
Android初学 动画

  1. 首先在src/main/res/anim下创建动画alpha_1.xml
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:fromAlpha="1"
    android:toAlpha="0" />
  1. 在布局文件中添加一个ImageView
  2. ImageView设置动画
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ImageView imageView = findViewById(R.id.animation1);
        imageView.setImageResource(R.drawable.p1);
        Animation animation = AnimationUtils.loadAnimation(this, R.anim.alpha_1);
        // 重复动画 INFINITE 无限循环
        animation.setRepeatCount(Animation.INFINITE);
        imageView.startAnimation(animation);
    }
}

ScaleAnimation:缩放动画(用来实现缩放渐变效果)

效果图:
Android初学 动画
Android初学 动画

  1. 创建动画文件anim/scale_anim.xml,实现图片等比从无放大到原来的1.5倍的效果
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator"
    android:fromXScale="0"
    android:toXScale="1.5"
    android:fromYScale="0"
    android:toYScale="1.5"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="3000"/>
  1. 在布局文件中添加一个ImageView
  2. ImageView设置动画

TranslateAnimation:平移动画(用来实现位移渐变效果)

  1. 创建动画文件anim/translate_anim.xml,实现图片沿对角线位移
    坐标原点应该是View的左上角,好像是。
    Android初学 动画
  2. 创建动画文件anim/translate_anim.xml,实现图片沿对角线位移
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:fromXDelta="0"
    android:fromYDelta="0"
    android:toXDelta="500"
    android:toYDelta="500" />
  1. 在布局文件中添加一个ImageView
  2. ImageView设置动画

效果图:

RotateAnimation:旋转动画(用来实现旋转渐变效果)

  1. 创建动画文件anim/rotate_anim.xml,实现图片中心旋转
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:fromDegrees="360"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="0" />
  1. 在布局文件中添加一个ImageView
  2. ImageView设置动画

效果图:
Android初学 动画

AnimationSet:可以同时使用多种动画组合

如实现透明度从0到1,同时从0放到到原来的1.5倍的动画如下。

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale
        android:duration="2000"
        android:fromXScale="0.2"
        android:fromYScale="0.2"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1.5"
        android:toYScale="1.5" />
    <alpha
        android:duration="2000"
        android:fromAlpha="0"
        android:toAlpha="1" />
</set>

结束Peace!

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


下一篇:Carson带你学Android:手把手带你全面学习补间动画的使用!