Android动画

一、View动画


1、View动画的种类 <set>

  • -android:duration 动画持续时间
  • -android:interpolator 动画集合所采用的插值器
  • -android:shareinterpolator 集合中的动画是否和集合共享同一个插值器
1)平移动画 <translate>
  •  -android:fromXDelta 表示x的起始值
  •  -android:fromYDelta 表示y的起始值
  •  -android:toXDelta 表示x的结束值
  •  -android:toYDelta 表示y的结束值
2)缩放动画 <scale>
  •  -android:fromXScale 水平方向缩放的起始值(0.0-1.0)
  •  -android:fromYScale 水平方向缩放的起始值(0.0-1.0)
  •  -android:toXScale 水平方向缩放的起始值(0.0-1.0)
  •  -android:toYScale 水平方向缩放的起始值(0.0-1.0)
  •  -android:pivotX 缩放的轴点的x坐标
  •  -android:pivotY 缩放的轴点的y坐标
3)旋转动画 <rotate>
  •  -android:fromDegrees 旋转开始的角度
  •  -android:toDegrees 旋转结束的角度
  •  -android:pivotX 旋转的轴点的x坐标
  •  -android:pivotY 旋转的轴点的y坐标
4)渐变动画 <alpha>
  •  -android:fromAlpha 表示透明度的起始值(0.0-1.0)
  •  -android:toAlpha 表示透明度的结束值(0.0-1.0)
 
使用:
Animation animation = AnimationUtils.loadAnimation(this, R.anim.animation_test);
view.startAnimation(animation);

2、自定义View动画

重写它的initialize和applyTransformation方法,在initialize中做一些初始化工作,在applyTransformation中进行一些相应的矩阵变换。

3、帧动画

帧动画是顺序播放一组预先定义好的图片,类似于电影播放。
在res/drawable下定义文件,根元素为<animation-list>,其中加入一个个item,即图片。

二、View动画的特殊使用场景


1、LayoutAnimation

1)作用于ViewGroup,为ViewGroup指定一个动画,它的子元素都会具有这种动画。
2)<layoutAnimation>中的属性:
  •  -android:delay 子元素开始动画的时间延迟
  •  -android:animationOrder 子元素动画的顺序
  •  -android:animation 子元素具体的入场动画

2、Activity的切换效果

使用overridePendingTransition方法,这个方法必须位于startActivity或者finish之后,否则不起作用。

三、属性动画


1、主要动画类


1)AnimationSet:对应<set>标签
  •  -android:ordering 表示动画集合中子动画的播放顺序
2)ValueAnimator:对应<animator>标签
  •  -android:duration 表示动画时长
  •  -android:valueFrom 表示属性的起始值
  •  -android:valueTo 表示属性的结束值
  •  -android:startOffset 表示动画的延迟时间
  •  -android:repeatCount 动画的重复次数
  •  -android:repeatMode 动画的重复模式
  •  -android:valueType 表示android:propertyName所指定的属性的类型
3)ObjectAnimation:对应<objectAnimator>
  •  -android:propertyName 表示属性动画的作用对象的属性的名称
  •  -android:duration 表示动画时长
  •  -android:valueFrom 表示属性的起始值
  •  -android:valueTo 表示属性的结束值
  •  -android:startOffset 表示动画的延迟时间
  •  -android:repeatCount 动画的重复次数
  •  -android:repeatMode 动画的重复模式
  •  -android:valueType 表示android:propertyName所指定的属性的类型
 

2、插值器和估值器

1)Interpolator:计算出当前属性值改变的百分比。
2)TypeEvaluator:根据当前属性值改变的百分比来计算改变后的属性值。

3、属性动画的监听器

主要有两个接口:
1)AnimatorUpdateListener
  •  -onAnimationStart:动画开始调用
  •  -onAnimationEnd:动画结束调用
  •  -onAnimationCancel:动画取消调用
  •  -onAnimationRepeat:动画重复调用
2)AnimatorListener
  •  --onAnimationUpdate:动画每播放一帧,就调用一次
 

4、对任意属性做动画

1)对View的X属性做动画,想让动画生效,必须满足两个条件:
  •  -这个View必须提供setX方法。
  •  -setX方法对属性X所做的改变,必须通过某种方法反映出来。
 
2)解决方法
  •  -给你的对象加上get和set方法,前提是你有权限。
  •  -用一个类来包装原始对象,间接为其提供get和set方法。(实现简单)
  •  -采用ValueAnimator,监听动画过程,自己实现属性的改变。

5、属性动画的工作原理

属性动画根据你传递的该属性的初始值和最终值,以动画的效果多次调用set方法,每次传递给set的值都不一样,随着时间推移,所传递的值越来越接近最终值,最后完成整个动画。

四、使用动画的注意事项


1、OOM问题

尽量避免使用帧动画,因为其中图片数量较多,而且有的图片太大。

2、内存泄漏

在属性动画中有一类无限循环的动画,这类动画需要在Activity退出时及时停止,否则会引起内存泄漏。

3、兼容性问题

动画在3.0以下的系统上有兼容问题,需要做好适配。

4、View动画的问题

View动画只改变View的影像,并不会改变它的真正状态,当出现动画完成后View无法隐藏的情况,调用view.clearAnimation()清除动画即可。

5、不要使用px

尽量使用dp,使用px会导致在不同设备上产生不同效果。

6、动画元素的交互

在3.0以前的系统上,新位置无法触发单击事件,原位置可以,从3.0以后,属性动画的单击事件触发位置为移动后的位置,但是View动画仍在原地。

7、硬件加速

建议开启硬件加速,提高动画的流畅。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值