# 读 Android 开发艺术探索 &9

原创 2017年02月06日 11:59:51

关键词:View 动画 / 帧动画 / 属性动画

Android 动画分为三种:View 动画、帧动画和属性动画。本次笔记初步梳理了跟 Android 动画相关的基本知识点,便于今后温故知新,查漏补缺。

1. View 动画 #

需要知道的几点:

  1. View 动画的作用对象是 View;
  2. 只支持 4 种类型:平移(Translate)TranslateAnimation、旋转(Rotate)RotateAnimation、缩放(Scale)ScaleAnimation、不透明度(Alpha)AlphaAnimation;
  3. 虽然帧动画也属于 View 动画,但是其表现形式与以上四种的变换效果不同;
  4. View 动画建议采用 XML 来定义动画,XML 的可读性比较好;
  5. 使用 View 动画的特殊场景:ViewGroup 中可以控制子元素的出场效果,在 Activity 中可以实现不同 Activity 之间的切换效果;
  6. LayoutAnimation 也是一个 View 动画,作用于 ViewGroup,常常被用在 ListView 上;
  7. Activity 可以自定义切换效果,主要用到 overridePendingTranslation(int enterAnim, int exitAnim) 方法,需要在 startActivty(Intent) 或者 finish() 之后调用它才能生效;

PS 帧动画:
帧动画其实也属于 View 动画,但是不同的是系统提供了另一个类 AnimationDrawable 来使用帧动画,顺序播放一组实现预定义好的图片。比较简单但是容易引起 OOM。

2. 属性动画 #

需要知道的几点:

  1. 对作用对象进行了扩展,属性动画可以对任何对象做动画,甚至还可以没有对象;想要实现比较绚丽的动画,需要知道:ValueAnimator、ObjectAnimator 和 AnimatorSet 这三个动画类,其中 ObjectAnimator 继承自 ValueAnimator,AnimatorSet 是动画集合可以定义一组动画;
  2. 属性动画默认的时间间隔是 300 ms,默认帧率 10 ms/帧;
  3. 属性动画可以达到的效果是:在一个时间间隔内,完成对象从一个属性值到另一个属性值的改变,几乎是无所不能的;
  4. 实际开发中建议使用代码的方式来实现属性动画,因为更简单并且通过代码动态地创建属性动画;
  5. 属性动画的工作原理:
    要求动画作用的对象提供该属性的 set 方法,属性动画根据你传递的该属性初始值和最终值,以动画的效果多次去调用 set 方法。每次传递给 set 方法的值都不一样,确切来说是随着时间的推移,所传递的值越来越接近最终值;
  6. 属性动画中的插值器(Interpolator)和估值器(TypeEvaluator)很重要,是实现非匀速动画的重要手段;插值器的作用是根据当前时间流逝的百分比来计算出当前属性值改变的百分比。估值器的作用是根据当前属性改变的百分比来计算改变后的属性值;
  7. 属性动画要求该属性有 set 方法和 get 方法(可选)
  8. 可以自定义插值器和估值器,它们都是一个接口,且内部都只有一个方法,我们只要派生一个类实现接口就可以了,然后就可以做出千奇百怪的效果;
  9. 属性动画需要运行在 Looper 的线程里;

3. 使用动画需要特别注意的几点 #

  1. OOM 问题。尽量避免使用帧动画;
  2. 内存泄漏问题。属性动画中有一类是无限循环的动画,需要在 Activity 的退出时及时停止,否则导致 Activity 无法释放而造成内存泄漏,View 动画不存在这个问题;
  3. View 动画是对 View 的影像做动画,并不是真的改变 View 的状态,防止 setVisibility(View.GONE) 失效,只需要调用 view.clearAnimation() 清除 View 动画即可解决此问题;
  4. 尽量使用 dp,使用 px 会导致在不同的设备上有不同的效果;
  5. 建议使用动画的过程中,开启硬件加速提高动画的流畅性;

End.

Note by HF.
Learn from 《Android 开发艺术探索》


Android开发艺术探索读书笔记(二)-跨进程通信

在Androi系统中,为了对内存有一个统一的优化管理,通常对每个进程所能使用的最大内存做出限制。而在开发大型应用程序或者游戏的时候,为了获得更多的内存来支持程序的运行。往往需要在应用中开启多个线程来取...
  • dengminghli
  • dengminghli
  • 2017年02月05日 22:04
  • 775

《Android开发艺术探索》图书勘误

第一章 在13页提到“系统只在Activity异常终止的时候才会调用onSaveInstanceState与onRestoreInstanceState来储存和恢复数据,其他情况不会触发这个过程。...
  • singwhatiwanna
  • singwhatiwanna
  • 2016年01月13日 10:51
  • 46376

《Android开发艺术探索》——View的事件体系

一、view基础知识 什么是View (1)View是Android中所有控件的基类,不管是简单的Button和TextView还是复杂的RelativeLayout和ListView,它们的共同基类...
  • ilsla
  • ilsla
  • 2016年03月07日 15:08
  • 729

[读书笔记]《Android开发艺术探索》第二章笔记

《Android开发艺术探索》第二章笔记IPC Inter-Process Communication的缩写。含义为进程间通信或跨进程通信,是指两个进程之间进行数据交换的过程。 进程和线程的区别 按照...
  • CodeEmperor
  • CodeEmperor
  • 2016年02月03日 16:03
  • 1675

一个规范的自定义View——Android开发艺术探索笔记

如何定义一个规范的自定义View
  • L664675249
  • L664675249
  • 2016年03月03日 13:58
  • 2118

《Android开发艺术探索》笔记

本笔记整理自: https://www.gitbook.com/book/tom510230/android_ka_fa_yi_shu_tan_suo/details 参考文章:http://szys...
  • xiang_freedom
  • xiang_freedom
  • 2017年02月09日 17:30
  • 5004

Android开发艺术探索——第二章:IPC机制(上)

Android开发艺术探索——第二章:IPC机制(上) 本章主要讲解Android的IPC机制,首先介绍Android中的多进程概念以及多进程开发模式中常见的注意事项,接着介绍Android中的序...
  • qq_26787115
  • qq_26787115
  • 2016年09月25日 21:20
  • 3143

Android开发艺术探索读书笔记(一)

首先向各位严重推荐主席这本书《Android开发艺术探索》。     再感谢主席邀请写这篇读书笔记 + 书评。书已经完整的翻完一遍了,但是还没有细致的品读并run代码,最近有时间正好系统的把整本书从内...
  • amurocrash
  • amurocrash
  • 2015年09月24日 18:34
  • 8161

View的滑动冲突解决-android开发艺术探索笔记

最近在准本找工作的同时,也在慢慢的看android开发艺术探索这本书感觉写的真是太好了,有空下来就做个笔记,下面进入正题:滑动冲突的产生:在页面中要有内外两层勇士滑动,这个时候就会产生滑动冲突了,比如...
  • Anny_Lin
  • Anny_Lin
  • 2015年12月18日 18:56
  • 698

Android开发艺术探索笔记 第四章

Android开发艺术探索笔记 第四章View的工作原理基本概念 ViewRoot对英语ViewRootImpl类,他是连接WindowManager和DecorView的纽带 View的绘制流程是从...
  • qq_18228883
  • qq_18228883
  • 2016年08月25日 00:02
  • 165
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:# 读 Android 开发艺术探索 &9
举报原因:
原因补充:

(最多只允许输入30个字)