1.Frame Animation帧动画
逐帧动画
首先创建几张图片,导入到drawable中
所以首先还要创建一个xml文件
直接在drawable下new一个Drawable resource file
再将selecter改为animation-list
改为
在animation-list标签中通过item写
注意这里这个duration是什么意思呢?其实就是在播放的时候,该图片播放的时间,单位是毫秒
ctrl+d 快捷键快速复制,再稍加修改
注:我们发现这个animation-list,也就是这个frame.xml是放在drawable下的,所以我们在使用的时候,就当成背景图使用即可
在activity_main.xml中导入一下
发现并不能动起来
原来还需要启动一下动画效果
通过调用AnimationDrawable的start()和stopt()来实现动画的播放和停止
我们可以加一个点击,点击图片的时候就播放,再点击就停止
我们先给这个RelativeLayout一个id
然后在MainActivity中获取到id
因为要实现点击的时候启动或停止,所以还要设置一个标志位flag
再回到onClick中写
run一下
(这个ScreenToGif这个软件截动图真好用)
2.Tweened Animation补间动画
补间动画(view动画)
什么是补间动画?其实就是我们给这个动画设置一个初始值和一个结束值,然后设置一个变化时间,然后Android系统会自动给我们把这个动画补全
补间动画也称为view动画,因为我们只需要拿到一个view,设定它开始和结束的位置,中间的view会自动由系统补齐,而不需要帧动画每一幅图都是提前准备好的。
通过代码来演示一下
先导入一张图片
然后写一下activity_main.xml
首先我们来设置一个透明度的变化
需要先给补间动画设置初始值,结束值和时间
我们在res下先创建一个文件夹
然后我们可以看到在根节点<Set>中,就有这些设置属性
alpha:透明度
先写初始值:fromAlpha,从0完全透明开始
再写结束值:toAlpha,直到完全不透明1
最后还有个时间(周期duration(毫秒))
注:这里安卓好像不会自动补全,需要我们自己写
写好了还需要去java中使用这个alpha.xml
这里这个loadAnimation方法有俩个参数
这里的context就是MainActivity.this,id就是alpha.xml这个文件
然后再通过imageView来启动animation
run一下
rotate:旋转
操作也类似
先建一个rotate.xml
fromDegrees:从多少角度开始旋转
toDegrees:旋转到多少角度结束
pivotX:旋转轴心X坐标(50%即中心)
pivotY:旋转轴心Y坐标
duration:周期(时间(毫秒))
接下来就是去java中使用,同理
就改为rotate即可
run一下
scale:缩放
同理
fromXScale="1" 原始x轴大小
fromYScale="1" 原始y轴大小
toXScale="0.5" 缩放后的x轴大小
toYScale="0.5" 缩放后的y轴大小
pivotX="50%" 旋转轴心X坐标(50%即中心)
pivotY="50%" 旋转轴心Y坐标
duration="2000" 周期(时间(毫秒))
translate:平移
fromXDelta="0" x轴初始位置
fromYDelta="0" y轴初始位置
toXDelta="400" 平移后x位置
toYDelta="400" 平移后x位置
duration="2000"
注:全写在一块就可以组合起来
3.Property Animation 属性动画
属性动画
其实就是通过设置value这个值的变化而显现的动画效果
先创建一个ValueAnimator
我们发现有很多种类,这里我们直接用ofFloat
注:这里创建的Animator,而不是前面所用的Animation
创建好valueAnimator后怎么用呢?
run一下
2秒从0加到1
ObjectAnimator实际上是继承自ValueAnimator
那ObjectAnimator和ValueAnimator有什么不同呢?
ObjectAnimator可以直接针对对象,我们想要去控制哪一个控件去进行动画的设置,那么在java代码中就要加哪个控件
我们直接给HelloWorld的TextView加一个id,然后在java中获取一下
注:我们发现这里ofFloat()的参数不一样了,首先是一个target,这个target其实是一个目标,就是我们要对这个动画里的哪一个控件进行改变,这里我们填入textView。第二个参数是属性名称,比如我们要改textView的透明度,就填”alpha”,最后一个就是值的改变,从多少到多少
整个的意思就是ObjectAnimator让textView的透明度alpha从0完全透明到1完全不透明
别忘了还有时间和启动
run一下
注:
这里除了能对透明度alpha设置以外,还可以对它的旋转等等都能设置,那到底这个地方还能填一些什么属性呢?这个怎么去看呢?其实这里我们看TextView中有哪些属性,我们就能用哪些属性,那这个alpha在TextView中到底有没有呢?
我们可以点进TextView源码中搜索一下,发现并没有
其实没有也不是问题,因为ObjectAnimator是看alpha的get和set方法,TextView中虽然没有alpha的字段,但是有alpha的get和set方法
可以看到getAlpha在View里面,也就是在TextView的父类中,set也一样
所以说,只要类里面存在某个属性的get和set方法,那我们就可以在ObjectAnimator中使用这个属性
最后一个监听器,我们直接撸码
除了这个四个外,还提供了一个适配的方式
可以让我们选中一个或几个方法进行重写就行了,比较方便,不像上面的一写就要写四个