Android动画(Frame Animation帧动画,Tweened Animation补间动画,Property Animation 属性动画)

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中使用这个属性

最后一个监听器,我们直接撸码

除了这个四个外,还提供了一个适配的方式

可以让我们选中一个或几个方法进行重写就行了,比较方便,不像上面的一写就要写四个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏夜追凉丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值