Android动画机制与使用技巧

本文详细探讨了Android的动画系统,包括View动画框架、属性动画分析、布局动画、插值器以及自定义动画。重点介绍了ObjectAnimator、PropertyValuesHolder、ValueAnimator和AnimatorSet在实现复杂动画中的应用,并通过实例展示了如何使用动画事件监听和XML定义动画。此外,还讨论了Interpolators如何影响动画速度,并给出了自定义动画的实现方法。
摘要由CSDN通过智能技术生成
导语

Android动画效果一直是人机交互中十分重要的一部分,从早期的Android版本中,由于动画机制和绘图机制的不健全,Android的人机交互备受诟病,Android从4.X开始,特别是5.X,动画越来越完善了,Google也开始重视这一方面了,当然我们也必须重视这一方面,看实例戳我

主要内容

  • Android View动画框架
  • Android属性动画分析
  • Android布局动画
  • Interpolators(插值器)
  • 自定义动画

具体内容

Android View动画框架

Animation动画框架定义了透明度,旋转,缩放个移动等几种动画,而且控制了整个的View,实现原理是每次绘制视图的时候View所在的ViewGroup中drawChild函数获取该View的Animation的Transformation值,然后调用了canvas.concat(transformToApply.getMatrix()),通过矩阵运算完成动画帧,如果动画没有完成则继续调用invalidate()方法启动下回绘制来驱动动画,从而完成整个动画的绘制。

视图动画使用简单,效果丰富,它提供了AlphaAnimation,RotateAnimatio,TranslateAnimation,ScaleAnimation四种动画方式,并提供了Animationset动画集合,混合使用多种动画,在Android3.0之前,视图动画一家独大,但随着Android3.0之后属性动画框架的推出它的风光就大不如前了。相比属性动画,视图动画的一个非常大的缺陷就是不具备交互性,当某个元件发生视图动画后,其响应事件的位置还依然在动画前的地方,所以视图动画只能做普通的显示效果,避免交互的发生,但是它的优点也非常明显,即效率比较高且使用方便。视图动画使用非常简单, 不仅可以通过XML文件来描述一个动画过程,同样也可以使用代码来控制整个动画过程。

下面这个实例就列举了一些简单的视图动画使用方法。

透明度动画
AlphaAnimation al = new AlphaAnimation(0,1);
al.setDuration(2000);
alpha.startAnimation(al);
旋转动画
RotateAnimation ro = new RotateAnimation(0,300,100,100); ro.setDuration(2000); 
rotate.setAnimation(ro);
平移动画
TranslateAnimation tr = new TranslateAnimation(0,200,0,300);
tr.setDuration(2000);
translate.setAnimation(tr);
缩放动画
ScaleAnimation sc = new ScaleAnimation(0,2,0,2); sc.setDuration(2000); 
scale.setAnimation(sc);
动画集合
AnimationSet setAnimation = new AnimationSet(true);
setAnimation.setDuration(2000);

AlphaAnimation als = new AlphaAnimation(0,1);
als.setDuration(2000);
setAnimation.addAnimation(als);

RotateAnimation ros = new RotateAnimation(0,300,100,100);
ros.setDuration(2000);
setAnimation.addAnimation(ros);

set.startAnimation(setAnimation);

我们一起来运行一下看效果:

动画合集

当然,有动画,就有监听,我们来监听一下动画,以透明动画为例。

AlphaAnimation al = new AlphaAnimation(0,1);
                al.setDuration(2000);
                alpha.startAnimation(al);

                al.setAnimationListener(new Animation.AnimationListener() {
                    @Override
                    public void onAnimationStart(Animation animation) {
                        Log.i("Animation","开始");
                    }

                    @Override
                    public void<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值