【笔记】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" |
启动动画
1 | RelativeLayout relativeLayout = findViewById(R.id.rl); |
停止动画
1 | RelativeLayout relativeLayout = findViewById(R.id.rl); |
补间动画(tweened animation)
- 给动画设置一个初始图、结束图、动画时间,安卓自动补全动画
图片放到页面
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]
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%]
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%]
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="":动画结束时的位置纵坐标
1 |
|
启动动画
1 | ImageView imageView = findViewById(R.id.iv); |
属性动画(property animation)
- 改变控件某一个属性,从而时间动画效果
ValueAnimator
- 改变控件的value值
ValueAnimator.ofFloat(<start>f, <end>f):获取对象,并设置变化起止值,of后可以设置不同的数据类型valueAnimator.setDuration(<ms>):设置动画持续时间,单位毫秒animator.getAnimatedValue():获取变化过程中的值
1 | ValueAnimator valueAnimator = ValueAnimator.ofFloat(0f, 1f); |
ObjectAnimator
- 改变控件对象某一属性的值
ObjectAnimator.ofFloat(imageView, "alpha", 0f, 1f):获取对象,并设置变化起止值,of后可以设置不同的数据类型
imageView:设置动画的控件对象alpha:设置动画的控件属性,只要对象中有对应属性的get/set方法,就可以对这个属性添加动画0f:开始值1f:截止值
valueAnimator.setDuration(<ms>):设置动画持续时间,单位毫秒
1 | ImageView imageView = findViewById(R.id.iv); |
设置监听器
1 | objectAnimator.addListener(new Animator.AnimatorListener() { |
设置适配器
- 适配器可以只重写一个监听方法
1 | objectAnimator.addListener(new AnimatorListenerAdapter() { |