Android学习笔记 - 《Android开发艺术探索》第七章 - Animation

第七章 Android动画深入分析

  1. View动画通过对场景里的对象不断做图像变换(平移、缩放、旋转、透明度)从而产生动画效果,他是一种渐进式动画。可自定义。

  2. 帧动画通过顺序播放一系列图像从而产生动画效果,图片过多过大会导致OOM。

  3. 属性动画通过动态改变对象的属性从而达到动画效果。

7.1 View动画

作用对象是View,支持4中动画效果:平移、缩放、旋转、透明度。

7.1.1 View动画的种类

View动画的4中变换效果对应Animation的4个子类:TranslateAnimation、ScaleAnimation、RotateAnimation、AlphaAnimation。

可通过XML(res/anim/XXX.xml)定义或者代码动态创建。

  1. 标签标示动画集合,对应AnimationSet类,可以包含若干个动画,并且内部也可以嵌套其他动画集合。

    • android:interpolator 插值器,影响动画的速度,默认为@android:anim/acclerate_decelerate_interpolator,即加速减速插值器

    • android:shareInterpolator 表示集合中的动画是否和集合共享同一个插值器。如果集合不指定插值器,那么自动化就需要单独制定所需的插值器或者使用默认值

  2. 标签标示平移动画,对应TranslateAnimation类。

    • android:fromXDelta x起始值

    • android:toXDelta x结束值

    • android:fromYDelta y起始值

    • android:toYDelta y结束值

  3. 标签标示缩放动画,定义ScaleAnimation

    • android:fromXScale 水平缩放起始值,如0.5

    • android:toXScale 水平缩放结束值,如1.2

    • android:fromYScale 竖直缩放起始值

    • android:toYScale 竖直缩放结束值

    • android:pivotX 缩放的轴点的x坐标

    • android:pivotY 缩放的轴点的y坐标

    轴点:默认为View的中心点,此时水平方向缩放会导致View想左右两个方向同时进行缩放,如果轴点设置为View的右边界,那么缩放只会向左进行,反之同理。

    • android:fromDegrees 开始角度,如0

    • android:toDegrees 结束角度,如180

    • android:pivotX 缩放的轴点的x坐标

    • android:pivotY 缩放的轴点的y坐标

    • android:fromAlpha 开始值,如0.1

    • android:toAlpha 结束值,如1

其他View动画常用属性

android:duration 动画持续时间

android:fillAfter 动画结束后是否停留在结束为止,true or false
  1. 应用xml

    Animation animation = AnimationUtils.loadAnimation(this, R.anim.XXX);
    mView.startAnimation(animation);

  2. 代码动态添加动画

    AlphaAnimation alphaAnim = new AlphaAnimation(0, 1);
    alphaAnim.setDuration(300);
    mView.startAnimation(alphaAnim);

  3. 可以通过setAnimationListener添加动画过程的监听器

7.1.2 自定义View动画

  1. 继承Animation抽象类

  2. 重写initialize(做一些初始化工作)和applyTransformation(进行相应的矩阵变换,很多时候需采用Camera来简化矩阵变换过程)方法。

7.1.3 帧动画

使用AnimationDrawable来使用帧动画

  1. 通过XML定义一个AnimationDrawable (res/drawable/XXX.xml)

7.2 View动画的特殊使用场景

特殊场景:在ViewGroup中控制子元素的出场效果,在Activity中实现不同Activity之前的切换效果。

7.2.1 LayoutAnimation

  1. LayoutAnimation作用于ViewGroup,为ViewGroup指定一个动画,这样当他的子元素出场时都会具有这种动画效果。常用于ListView。

    1) 路径:/res/anim/xxx.xml

    2) android:delay 开始动画的延迟时间

    3) android:animationOrder 子元素动画的顺序,normal(顺序)、reverse(反序)、random(随机)

    4) android:animation 子元素的入场动画

  2. 为ViewGroup指定android:layoutAnimation=”@anim/xxx”

  3. 除了在xml中指定LayoutAnimation,还可以通过LayoutAnimationController用代码动态实现。

7.2.2 Activity切换效果

对应方法:overridePendingTransition(int enterAnim, int exitAnim),需在startActivity或者finish之后调用才能生效。

7.3 属性动画

与View动画不同,属性动画可以对任何对象做动画。有ValueAnimator、ObjectAnimator、AnimatiorSet等概念。

7.3.1 使用属性动画

  1. 改变一个对象(myObject)的translationY属性

    ObjectAnimator.ofFloat(myObject, “translationY”, -myObject.getHeight()).start();

  2. 改变一个对象的背景色属性 backgroundColor

  3. 动画集合,对View进行旋转、平移、缩放、透明度改变

7.3.2 理解插值器和估值器

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值