个人博客:

http://www.milovetingting.cn

Android的动画可以分为三种:View动画、帧动画和属性动画,帧动画也属于View动画的一种,只不过它和平移、旋转等常见的View动画在表现形式上略有不同而已。

1、View动画

  • 平移动画:TranslateAnimation

  • 缩放动画:ScaleAnimation

  • 旋转动画:RotateAnimation

  • 透明度动画:AlphaAnimation

用XML来定义属性动画需要定义在res/anim目录下。

2、View动画的特殊使用场景

2.1、LayoutAnimation

LayoutAnimation使用于ViewGroup,为ViewGroup指定一个动画,它的子元素出场时都会具有这种动画效果。这种效果常用在ListView上。

2.2、Activity的切换效果

主要用到overridePendingTransition(int enterAnim,int exitAnim)这个方法,必须在startActivity(intent)或者finish()之后被调用才能生效。

Fragment中添加切换动画,可以通过FragmentTransaction中的setCustomAnimations()方法来添加切换动画,这个切换动画需要的是View动画。

3、属性动画

属性动画可以对任意对象的属性进行动画而不仅仅是View,动画默认时间间隔是300ms,默认帧是10ms/帧。

用XML来定义属性动画需要定义在res/animator目录下。

对object的属性abc属性做动画,如果要让动画生效,要同时满足两个条件:

1、object必须要提供setAbc方法,如果动画的时候没有传递初始值,还要提供getAbc方法,因为系统要去取abc属性的初始值。如果不满足这条,程序直接Crash。

2、object的setAbc对属性abc所做的改变必须能够通过某种方法反映出来,比如会带来UI的改变等。如果不满足这条,动画无效果但不会Crash。

如果只满足条件1,不满足条件2,可以有3种解决方法:

  • 给对象加上get和set,如果有权限的话

  • 用一个类来包装原始对象,间接为其提供get和set方法

    private void performAnimate(){

    ViewWrapper wrapper = new ViewWrapper(mButton);

    ObjectAnimator.ofInt(wrapper,"width",500).setDuration(5000).start();

    }

    private static class ViewWrapper{

    private View mTarget;

      public ViewWrapper(View target){
    mTarget = target;
    } public int getWidth(){
    return mTarget.getLayoutParams().width;
    } public void setWidth(int width){
    mTarget.getLayoutParams().width = width;
    mTarget.requestLayout();
    }

    }

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

4、注意事项

1、OOM问题

这个问题主要出现在帧动画中,当图片数量较多肯于图片较大时就极易出现OOM。

2、内存泄露

在属性动画中有一类无限循环的动画,这类动画需要在Activity退出时及时停止,否则将导致Activity无法释放从而造成内存泄露,View动画不存在此问题。

3、兼容性问题

动画在3.0以下系统上有兼容性问题。

4、View动画的问题

View动画是对View的影像做动画,并不是真正地改变View的状态,因此有时候会出现动画完成后View无法隐藏的现象,即setVisibility(View.GONE)失效,这时只要调用view.clearAnimation()清除View动画即可解决此问题。

5、不要用px

6、动画元素的交互

7硬件加速

使用动画的过程中,建议开启硬件加速,这样会提高动画的流畅性。

七、Android动画的更多相关文章

  1. Android群英传笔记——第七章:Android动画机制和使用技巧

    Android群英传笔记--第七章:Android动画机制和使用技巧 想来,最 近忙的不可开交,都把看书给冷落了,还有好几本没有看完呢,速度得加快了 今天看了第七章,Android动画效果一直是人家中 ...

  2. Android群英传》读书笔记 (3) 第六章 Android绘图机制与处理技巧 + 第七章 Android动画机制与使用技巧

    第六章 Android绘图机制与处理技巧 1.屏幕尺寸信息屏幕大小:屏幕对角线长度,单位“寸”:分辨率:手机屏幕像素点个数,例如720x1280分辨率:PPI(Pixels Per Inch):即DP ...

  3. Android动画解析--XML

    动画类型 Android的animation由四种类型组成 XML中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面 ...

  4. 《Android开发艺术探索》读书笔记 (7) 第7章 Android动画深入分析

    本节和<Android群英传>中的第七章Android动画机制与使用技巧有关系,建议先阅读该章的总结 第7章 Android动画深入分析 7.1 View动画 (1)android动画分为 ...

  5. android动画效果编程基础--Android Animation

    动画效果编程基础--Android Animation 动画类型 Android的animation由四种类型组成 XML中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 tran ...

  6. android动画效果大全

    动画类型 Android的animation由四种类型组成  Android动画模式 Animation主要有两种动画模式:一种是tweened animation(渐变动画 XML中 JavaCod ...

  7. Android 动画深入分析

    一些娱乐动画安德鲁斯被广泛使用应用上述的.在不牺牲性能,它可以带来非常好的体验,下面会解释具体的实现安卓动画.知识的学校一个明确清晰的白色. 动画类型 Android的animation由四种类型组成 ...

  8. Android动画详解

    一.动画类型 Android的animation由四种类型组成:alpha.scale.translate.rotate XML配置文件中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画 ...

  9. Android动画系列 - PropertyAnim 详解

    前言:上一篇文章传统View动画与Property动画基础及比较简单对Android动画系统的基础做了介绍,本篇文章将对PropertyAnimation进行全面深入的探讨,本篇文章可以分为两大块,从 ...

  10. Android动画效果之自定义ViewGroup添加布局动画

    前言: 前面几篇文章介绍了补间动画.逐帧动画.属性动画,大部分都是针对View来实现的动画,那么该如何为了一个ViewGroup添加动画呢?今天结合自定义ViewGroup来学习一下布局动画.本文将通 ...

随机推荐

  1. POLARDB · 最佳实践 · POLARDB不得不知道的秘密(二)

    前言 POLARDB For MySQL(下文简称POLARDB)目前是阿里云数据库团队主推的关系型数据库.线上已经有很多企业用户在使用并且稳定运行了很久.当然,由于POLARDB是为云上环境专门打造 ...

  2. Unity导航 (寻路系统Nav Mesh Agent)

    第一种 简单寻路 地面接触到的.到达目标点不用跳跃能够一直走路到达.场景视图中简单搭设几个物体.胶囊体为寻路者,黄球为目标点 红地板,绿色障碍物.现将地板以及障碍物选中 在检视面板设置静态为Navig ...

  3. java_反射

    反射:reflect   成员属性:Field  成员方法:Method 构造方法:Constructor  类:Class 引用,援引:invoke   新实例:newInstance  Decla ...

  4. SQL Server2008 xp_cmdshell啟用

    1. 查看系统数据库参数配置: select * from sys.configurations where name='xp_cmdshell' 修改系统数据库参数:   语法格式:     sp_ ...

  5. 数据库艰难求生之路(基础:增删改查)part2

    一.数据库查询 由于这个点的东西实在是多的,我就和题目,知识点一起演示. 首先是创建数据库: create database ExampleInfo --创建数据库 use ExampleInfo - ...

  6. vue 中 vue-router、transition、keep-alive 怎么结合使用?

    <transition :name="name" mode="out-in" name="fade"> <keep-ali ...

  7. c++ 之模板进阶

    c++中的多态主要体现在模板与继承上. 继承可以理解为有相互关系的不同数据结构的集合. 而模板则是完全独立的数据结构,彼此无需依赖 在函数中使用模板, 可以根据函数传入的参数自动推导类型,从而省略到很 ...

  8. Sitecore® 8.2 Professional Developer考试心得

    因工作原因入了Sitecore的坑.. 不了解Sitecore认证考试的同学请移步: http://www.cnblogs.com/edisonchou/archive/2018/08/17/9488 ...

  9. Redis集群架构

    Redis集群概述 集群的核心意义只有一个:保证一个节点出现了问题之后,其他的节点可以继续提供服务使用. Redis基础部分讲解过主从配置:对于主从配置可以有两类:一主二从,层级关系.开发者一主二从是 ...

  10. 团队选题报告(bull beer)

    一.团队成员及分工 团队名称:bull beer 团队成员: 黄文东:选题报告word撰写 沈培:原型设计,博客撰写,ppt制作 邓泽中:住院 刘帅:查找相关资料 二.选题报告内容 项目名称:学费管理 ...