个人博客:

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. Kubernetes集群部署史上最详细(二)Prometheus监控Kubernetes集群

    使用Prometheus监控Kubernetes集群 监控方面Grafana采用YUM安装通过服务形式运行,部署在Master上,而Prometheus则通过POD运行,Grafana通过使用Prom ...

  2. 更好用的css命名方式——BEM命名

    一.什么是BEM? BEM代表块(Block),元素(Element),修饰符(Modifier).无论是什么网站页面,都可以拆解成这三部分. 二.带你认识网页 我们来看一下qq的官网,它可以由三个块 ...

  3. DSAPI 生成桌面图标(带数字)

    功能:在桌面上创建一个带有指定数字的图标. 效果图: 生成的ICO图标 代码 Private Sub 生成桌面图标(消息数量 As Integer) Try Dim B As New Bitmap(M ...

  4. SVN简介与安装

    SVN 简介: Subversion(SVN) 是一个开源的版本控制系統, 也就是说 Subversion 管理着随时间改变的数据. 这些数据放置在一个中央资料档案库(repository) 中. 这 ...

  5. eclipse代码提示设置过常用字符还是不起作用的解决方法

    问题:重装eclipse之后发现没有了代码提示,一般情况下在设置中添加自动提示的字符之后就可以了,设置如下 如上图,初始的时候是只有一个点号,并没有字符,输入26个字母的大小写后点击Apply and ...

  6. Video/Audio禁止快进(退)

    首先接着上个随笔.上个随笔主要介绍了视频音频的相关操作.属性和方法.这里主要记录一个应用:禁止快进(快退同理). 思路:监听快进事件(此处是监听播放时间更新),利用一个缓存的时间和播放到的时间进行对比 ...

  7. 如何检测或判断一个文件或字节流(无BOM)是什么编码类型

    前言: 昨天,在文章:终于等到你:CYQ.Data V5系列 (ORM数据层,支持.NET Core)最新版本开源了 中, 不小心看到一条留言: 然后就去该地址看了一下,这一看,顺带折腾了一天. 今天 ...

  8. 使用 JWT 生成 Token 代码示例

    JSON Web Token,简称 JWT, 是一个开放的标准(RFC 7519),它定义了以一种紧凑的.自包含的 JSON 对象在各方之间安全传输信息的方式.该信息含有数字签名,可以被验证和信任. ...

  9. python --- 冒泡排序算法

    别想太多了,这个冒泡排序就是我们脑海中想到的那个冒泡,就好像是气泡一样,较小的元素比较轻,从而要往上浮出来, 冒泡排序算法. 要对‘气泡’序列处理若干遍.所谓一遍处理,就是自底向上检查一遍这个序列,并 ...

  10. body标签中l的相关标签

    字体标签: h1~h6.font. u.b,.strong. em. sup. sub 排版标签: div,.span.br.hr.center.pre 图片标签: img 超链接: a 列表标签: ...