android提供了一系列的动画处理api,包括animator以及animation等。由于动画效果是根据人眼视觉残留原理形成的,因此动画过程中android需要不断频繁的更新view的相关属性,由此造成的开销也就比较大。当我们想制作比较复杂的动画,比如同时开启5个view的动效,这时如果单纯抛给每个view各自开始动效而不进行优化,那么很可能会造成UI卡顿。
如何针对复杂的动画进行优化呢?我结合自己最近做的项目,总结了以下几点:

1.如果多个view同时需要动效,那么最好减少“animator”的数目,尽可能的将多个view放置在一个animator的update回调函数中,而不是将每个view都分配一个animator/animation。虽然通过后者比较容易实现功能,但是极有可能造成卡顿。

2.改变动画的初始值,“欺骗”用户的眼睛。比如我要制作一个view由小变大的效果,通常是将scale设置由0到1动态变化,如果这个view的变化是在一个非常短的时间内完成的,那么完全可以将动效的初始值变为0.6。这样,在同样的持续时间段内(帧数相同),0.6->1比0->1所形成的动效要细腻的多,也就避免了给用户以“卡顿”的体验。

3.对于比较复杂的计算,如math.sin等函数,最好在初始化时进行计算,避免在动效的帧中进行计算

4.换个思路,巧用shader等。极端复杂的计算,如“水波纹效果”中,计算每个x轴的点对应的y轴坐标,如果在每一帧中重新计算,显然计算量非常大。而使用shader,每一帧只是改变shader的matrix,从而改变位移,就避免的大量复杂运算,效果也大大提升。

我将在后面补充一篇文章,关于如何优化多个view同时开启动效的问题,以此为例说明上述的前两条经验

[原创]android自定义动画的一点感悟的更多相关文章

  1. android 自定义动画

    android自定义动画注意是继承Animation,重写里面的initialize和applyTransformation,在initialize方法做一些初始化的工作,在applyTransfor ...

  2. android自定义动画

    前一篇说了实现过程,这次来写一个自己简单实现的3d动画 先来属性声明配置,方便使用xml 文件来定制动画 <!-- 有些类型其实是没必要的,只是实例代码,为了更具有代表性 --> < ...

  3. [原创]Android自定义View之IndicatorView,显示当前tab页所处位置的View

    概述 Android IndicatorView的灵感来源于SlidingTabView,虽然有句"不重复"造轮子在先,本着练手的目的,还是写了一个功能较为简单的类似view. 其 ...

  4. Android 自定义动画 Loading

    转自:http://my.oschina.net/janson2013/blog/118558 1.定义一个ImageView 定义一个ImageView是为了装载图片,其中的图片将被rotate用来 ...

  5. Android为TV端助力 自定义动画

    android自定义动画注意是继承Animation,重写里面的initialize和applyTransformation,在initialize方法做一些初始化的工作,在applyTransfor ...

  6. Android 自定义属性动画&Camera动画

      摘要: Android 自定义属性动画&Camera动画 1.相关知识点 对于Androi的帧动画,可以制作gif图片,有时为了能够动态的生成帧动画,就得需要使用代码构建了 Animati ...

  7. android 自定义ViewGroup和对view进行切图动画实现滑动菜单SlidingMenu

    示意图就不展示了,和上一节的一样,滑动菜单SlidingMenu效果如何大家都比较熟悉,在这里我简单说明一下用自定义ViewGroup来实现. 实现方法:我们自定义一个ViewGroup实现左右滑动, ...

  8. android 自定义ViewGroup和对view进行切图动画实现滑动菜单SlidingMenu[转]

    http://blog.csdn.net/jj120522/article/details/8095852 示意图就不展示了,和上一节的一样,滑动菜单SlidingMenu效果如何大家都比较熟悉,在这 ...

  9. Android自定义视图三:给自定义视图添加“流畅”的动画

    这个系列是老外写的,干货!翻译出来一起学习.如有不妥,不吝赐教! Android自定义视图一:扩展现有的视图,添加新的XML属性 Android自定义视图二:如何绘制内容 Android自定义视图三: ...

随机推荐

  1. 【leetcode】Linked List Cycle

    这个题真是坑死了,只怪自己不好吧.一开始审题,以为是给定一个首尾相连的链表,查看其中是否有循环(原谅我的无知吧!!).然后在那写啊写啊写,还在纠结是局部循环还是前一半和后一半一样这样的循环,blah ...

  2. linux下解决端口被占用问题

    查找被占用的端口: netstat -tln netstat -tln | grep 8080   查看端口属于哪个程序 lsof -i :8080   杀掉占用端口的进程: kill -9 进程ID ...

  3. HTML 中禁用鼠标右键和不能选中文字

    在body中加这句就可以了. <body oncontextmenu="return false" onselectstart="return false" ...

  4. Html5 Canvas transform setTransform

    Html5 Canvas transform就是矩阵变换,一种坐标的变形. 坐标变形的三种方式,平移translate, 缩放scale以及旋转rotate都可以通过transform做到. tran ...

  5. [游戏模版2] Win32最小框架

    >_<:Just the minimum Win32  frame don't have any other special function. //{{NO_DEPENDENCIES}} ...

  6. 有关CSS中字体响应式的设置

    在进行页面响应式设计中,往往需要根据屏幕分辨率来显示不同大小的字体.通常的做法是通过media queries给不同的分辨率指定不同的字体样式,例如: body { font-size: 22px; ...

  7. pro02总结:spring mvc + jdbc

    在pro01的基础上,加入springMVC. applicationContext.xml: <?xml version="1.0" encoding="UTF- ...

  8. atitit.ajax bp dwr 3.的注解方式配置使用流程总结.....

    atitit.ajax bp dwr 3.的注解方式配置使用流程总结..... 1. 下载  dwr.jar 1M 1 2. 配置注解方式..web.xml 1 3. Class 配置 2 4. 测试 ...

  9. app开发之deviceone

    deviceone,跨平台.低成本.纯原生的app开发服务,具体介绍见:http://www.deviceone.net/ do不同于dcloud.rn等开发套件,do只是一座桥梁,可以选择使用jav ...

  10. iOS7初体验(3)——图像资源Images Assets

    开始之前,首先回顾一下iOS7初体验(1)——第一个应用程序HelloWorld中的一张图,如下所示: 本文便分享一下Images.xcassets的体验~_~ 1. 打开此前使用过的HelloWor ...