Android动画

动画分三类:View动画,Drawable动画(帧动画),属性动画(Android3.0以上)

 

View动画

系统预置的View动画,4个类型,1个容器

使用

 

View动画可以自定义,继承Animation,在对应方法里完成相应的矩阵变换,采用Camera类简化矩阵变换过程

(平时很少用到自定义View动画,知道就行)

属性动画

属性动画常用的有ValueAnimator,ObjectAnimator,AnimatorSet(ObjectAnimator继承自ValueAnimator)

对应的XML标签为<animator>,<objectAnimator>,<set>

属性动画的原理就是不断的调用setXXX方法,还要通过getXXX方法获取初始值,

所以属性动画要求对象的该属性有set,get方法,并且该set,get方法确实在UI上有效

示例代码

                ObjectAnimator objectAnimatorX = ObjectAnimator.ofFloat(imageView, "translationX", 0, 200);
                ObjectAnimator objectAnimatorY = ObjectAnimator.ofFloat(imageView, "translationY", 0, 100,-200,300);
                AnimatorSet animatorSet = new AnimatorSet();
//      同时播放
                animatorSet.playTogether(objectAnimatorX, objectAnimatorY);
//      动画用时100ms
                animatorSet.setDuration(500);
//      开始动画
                animatorSet.start();

使用XML格式

AnimatorSet set=AnimatorInflater.loadAnimator(Context,R.anim.XXX);
set.setTarget(mButton);
set.start();

 

帧动画

<animation-list>

<item>android:duration 一个frame显示多长时间

帧动画容易引起OOM,不要用过多大尺寸图片

 

Android动画还可以作用于ViewGroup的子项入场效果和Activity的切换效果

1.ViewGroup子元素入场效果:

<layoutAnimation>XML标签,android:delay设置延迟android:animationOrder设置顺序android:animation设置动画

在ViewGroup的XML标签中用android:layoutAnimation引入

或者使用LayoutAnimationController类实现代码设置

2.Activity切换效果

overridePendingTransition(int enterAnim,int enterAnim)

这个方法在startActivity(Intent)和finish()之后生效,也要写在这两个之后

第一个参数为Activity被打开时的动画,第二个参数为Activity被暂停时的动画

3.Fragment切换效果

FragmentTransaction的setCustomAnimations()方法设置

 

动画的插值器和估值器

TimeInterpolator时间插值器,根据时间流逝的百分比计算出当前属性值改变的百分比

(也可以用Interpolator,是TimeInterpolator的子接口)

系统预置的有LinearInterpolator线性插值器:匀速动画,AccelerateDecelerateInterpolator加速减速插值器:两头慢中间快,DecelerateInterpolator减速插值器:动画越来越慢

 

TypeEvaluator类型估值器,根据当前属性改变的百分比来确定具体的属性值

系统预置的有IntEvaluator:针对Int型,FloatEvaluator:针对浮点型和ArgbEvaluator:针对Color属性

 

我们也可以自定义,继承TimeInterpolator(Interpolator)自定义插值器,继承TypeEvaluator自定义估值器

 

动画的监听器

AnimatorListener监听动画的开始,结束,取消,重复

(对应的适配器类AnimatorListenerAdapter)

AnimatorUpdateListener监听动画的每一帧变化

 

属性动画的问题

属性动画的原理就是不断的调用setXXX方法,还要通过getXXX方法获取初始值,

所以属性动画要求对象的该属性有set,get方法,并且该set,get方法确实在UI上有效

如果一个对象的set,get不存在或者无效有以下三种解决办法

1.给对象加上get和set方法

2.用包装类,间距提供get,set方法

3.用ValueAnimator,监听动画过程,自己实现属性的改变

 

注意事项

1.帧动画容易引起OOM,不要用过多大尺寸图片

2.无限循环的动画记得在Activity退出时及时停止

3.属性动画从Android3.0开始

4.View动画是对View的影像做动画,如果出现一些问题,可以clearAnimation()清除动画再解决问题

5.动画过程中尽量使用dp单位,解决不同屏幕的适配

6.属性动画的点击事件位置在新位置,而View动画的点击事件位置在原位置.

7.动画过程中建议开启硬件加速

 

 

 

参考:Android开发艺术探索

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值