【笔记】Android动画
前言
Android动画学习笔记
逐帧动画(frame-by-frame animation)
- 把几张图片进行快速播放,实现的动画效果
创建图片列表xml
将一组用于创建动画的图片放到
/app/src/main/res/drawable/
目录下创建一个用于存放图片列表的xml文件
frame.xml
/app/src/main/res/drawable/frame.xml
android:drawable="@drawable/图片名"
:定义图片路径android:duration="<ms>"
:定义图片显示时间,单位毫秒
1 |
|
把动画添加到页面
/app/src/main/res/drawable/activity_main.xml
android:background="@drawable/frame"
:背景设置为刚刚定义的图像列表
1 | <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" |
启动动画
/app/src/main/java/…/MainActivity.java
1 | RelativeLayout relativeLayout = findViewById(R.id.rl); |
停止动画
/app/src/main/java/…/MainActivity.java
1 | RelativeLayout relativeLayout = findViewById(R.id.rl); |
补间动画(tweened animation)
- 给动画设置一个初始图、结束图、动画时间,安卓自动补全动画
图片放到页面
/app/src/main/res/drawable/activity_main.xml
1 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" |
设置动画配置文件
- 在
/app/src/main/res/
目录下创建anim
目录,用于存放xml动画配置文件
透明度
- 在
/app/src/main/res/anim/
目录下创建alpha.xml
文件用于配置透明度动画
android:duration=""
:动画持续时间,单位毫秒android:fromAlpha=""
:动画开始时的透明度,取值范围:[0,1]
android:toAlpha=""
:动画结束时的透明度,取值范围:[0,1]
/app/src/main/res/anim/alpha.xml
1 | <set xmlns:android="http://schemas.android.com/apk/res/android"> |
旋转
- 在
/app/src/main/res/anim/
目录下创建rotate.xml
文件用于配置旋转动画
android:duration=""
:动画持续时间,单位毫秒android:fromDegrees=""
:动画开始时的角度,取值范围:[0,360]
android:toDegrees=""
:动画结束时的角度,取值范围:[0,360]
android:pivotX=""
:旋转中心点的横坐标位置,取值范围:[0%,100%]
android:pivotY=""
:旋转中心点的纵坐标位置,取值范围:[0%,100%]
/app/src/main/res/anim/rotate.xml
1 | <set xmlns:android="http://schemas.android.com/apk/res/android"> |
缩放
- 在
/app/src/main/res/anim/
目录下创建scale.xml
文件用于配置缩放动画
android:duration=""
:动画持续时间,单位毫秒android:fromXScale=""
:动画开始时的横向缩放倍数android:fromYScale=""
:动画开始时的纵向缩放倍数android:toXScale=""
:动画结束时的横向缩放倍数android:toYScale=""
:动画结束时的纵向缩放倍数android:pivotX=""
:缩放中心点的横坐标位置,取值范围:[0%,100%]
android:pivotY=""
:缩放中心点的纵坐标位置,取值范围:[0%,100%]
/app/src/main/res/anim/scale.xml
1 | <set xmlns:android="http://schemas.android.com/apk/res/android"> |
平移
- 在
/app/src/main/res/anim/
目录下创建translate.xml
文件用于配置平移动画
android:duration=""
:动画持续时间,单位毫秒android:fromXDelta=""
:动画开始时的位置横坐标android:fromYDelta=""
:动画开始时的位置纵坐标android:toXDelta=""
:动画结束时的位置横坐标android:toYDelta=""
:动画结束时的位置纵坐标
/app/src/main/res/anim/translate.xml
1 |
|
启动动画
/app/src/main/java/…/MainActivity.java
1 | ImageView imageView = findViewById(R.id.iv); |
属性动画(property animation)
- 改变控件某一个属性,从而时间动画效果
ValueAnimator
- 改变控件的value值
ValueAnimator.ofFloat(<start>f, <end>f)
:获取对象,并设置变化起止值,of
后可以设置不同的数据类型valueAnimator.setDuration(<ms>)
:设置动画持续时间,单位毫秒animator.getAnimatedValue()
:获取变化过程中的值
/app/src/main/java/…/MainActivity.java
1 | ValueAnimator valueAnimator = ValueAnimator.ofFloat(0f, 1f); |
ObjectAnimator
- 改变控件对象某一属性的值
ObjectAnimator.ofFloat(imageView, "alpha", 0f, 1f)
:获取对象,并设置变化起止值,of
后可以设置不同的数据类型
imageView
:设置动画的控件对象alpha
:设置动画的控件属性,只要对象中有对应属性的get/set方法,就可以对这个属性添加动画0f
:开始值1f
:截止值
valueAnimator.setDuration(<ms>)
:设置动画持续时间,单位毫秒
/app/src/main/java/…/MainActivity.java
1 | ImageView imageView = findViewById(R.id.iv); |
设置监听器
/app/src/main/java/…/MainActivity.java
1 | objectAnimator.addListener(new Animator.AnimatorListener() { |
设置适配器
- 适配器可以只重写一个监听方法
/app/src/main/java/…/MainActivity.java
1 | objectAnimator.addListener(new AnimatorListenerAdapter() { |