7.1 View动画

        View动画的作用对象是View,它支持四种动画效果,分别是平移动画,缩放动画,旋转动画和透明动画.

        帧动画也属于View动画,但是帧动画的表现形式和上面的四种变换效果不太一样.

      7.1.1 View动画的种类

        对应着Animation的四个子类:

          TranslateAnimation(位移动画),ScaleAnimation(缩放动画),RotateAnimation(旋转动画),AlphaAnimation(透明度动画)

        两种实现方式:

          第一种,定义xml文件,使用<alpha>/<scale>/<translate>/<rotate>四种标签定义的动画

          使用:

Button mButton = (Button)findViewById(R.id.button1);
Animation animation = AnimationUtils.loadAnimation(this, R.anim.animation_test);
mButton.startAnimation(animation);

          第二种,通过代码的方式启动动画

AlphaAnimation alphaAnimation = new AlphaAnimation(0,1);
alphaAnimation.setDuration(300);
mButton.startAnimation(alphaAnimation);

      7.1.2 自定义View动画

        自定义动画挺麻烦的,首先需要派生一种新动画只需要继承Animation这个抽象类,然后重写它的initialize和Transformation方法.

        在initialize方法中做一些初始化工作,在applyTranslation中进行相应的矩阵变换(很多时候采用Camera来简化矩阵变换的过程)

      7.1.3 帧动画

        是顺序播放一组预先定义好的图片,类似于电影播放.

        系统提供了另一个类AnimationDrawable来使用帧动画.

        首先需要通过XML来定义一个AnimationDrawable

        <animation-list>标签内部定义多个<item>

        定一个好之后,座位View的背景并通过Drawable来播放即可.

    

    7.2 View动画的特殊使用场景

        7.2.1 LayoutAnimation

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

          <layoutAnimation>标签

          还可以通过LayoutAnimationController来实现

        7.2.2 Activity的切换效果

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

    

    7.3 属性动画

        7.3.1 使用属性动画

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

          达到的效果:在一个时间间隔内完成对象从一个属性值到另一个属性值的改变.

          使用开源动画库nineoldandroids来兼容以前的版本

        1. 改变一个对象的translationY属性,让其沿着Y轴平移

               ObjectAnimator.ofFloat(myObject, "translationY", 100).start();

              2. 改变一个对象的背景色属性,典型的情形时改变View的背景色

               ValueAnimator colorAnim = ObjectAnimator.ofInt(this, "backgroundColor", /*Red*/0xFFFF8080, /*Blue*/0x8080FF);

               colorAnim.setDuration(3000);

               colorAnim.setEvaluator(new ArgbEvaluator());

               colorAnim.setRepeatCount(10);

               colorAnim.setRepeatMode(ValueAnimator,REVERSE);

               colorAnim.start();

            3. 动画集合

               AnimatorSet set = new AnimatorSet();

               set.playTogether(anim1, anim2, anim3);

               set.setDuration(1000).start();

        7.3.2 理解插值器和估值器

          TimeInterpolator(时间插值器),作用是根据时间流逝的百分比来计算出当前属性值改变的百分比

          系统预置的有LinearInterpolator(线性插值器:匀速动画),AccelerateDecelerateInterpolator(加速减速插值器:动画两头慢中间快)和DecelerateInterpolator(减速插值器:动画越来越慢)

        7.3.3 属性动画的监听器

          属性动画提供了监听器用于监听动画的播放过程,主要如下两个接口:

            AnimatorListener和AnimatorListener.

          AnimatorListener用来监听动画的开始,结束,取消以及重复播放.

          AnimatorUpdateListener会监听整个动画过程,动画是由许多帧组成的,没播放一帧,onAnimationUpdate就会被调用一次.

        7.3.4 对任意属性做动画

          属性动画要求动画作用的对象提供该属性的get和set方法,属性动画根据外界传递的该属性的初始值和最终值,以动画的效果多次去调用set方法,每次传递给set方法的值都不一样.

          (1)object必须要提供setAbc方法,如果动画的时候没有传递初始值,那么还要提供getAbc方法.

          (2)object的setAbc对属性abc所做的改变必须能够通过某种方法反应出来,比如会带来UI的改变之类的

        7.3.5 属性动画的工作原理

          属性动画要求动画作用的对象提供该属性的set方法,属性动画根据传递的该属性的初始值和最终值,以动画的效果多次去调用set方法.

          在ObjectAnimator的start方法:

            首先会判断如果当前动画,等待的动画(Pending)和延迟的动画(Delay)中有和当前动画相同的动画,那么就把相同的动画给取消掉,再接着就调用父类的super.start()方法.

          在ValueAnimator中的start方法:

            属性动画需要运行在右Looper的线程中.最终会调用AnimationHandler的start()方法,这个AnimationHandler不是Handler,而是一个Runnable.

第七章:Android动画深入分析的更多相关文章

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

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

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

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

  3. Android 动画深入分析

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

  4. Android动画深入分析

    动画分类 Android动画可以分3种:View动画,帧动画和属性动画:属性动画为API11的新特性,在低版本是无法直接使用属性动画的,但可以用nineoldAndroids来实现(但是本质还是vii ...

  5. 七、Android动画

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

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

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

  7. Android 动画animation 深入分析

    转载请注明出处:http://blog.csdn.net/farmer_cc/article/details/18259117 Android 动画animation 深入分析 前言:本文试图通过分析 ...

  8. 深入分析Android动画(二)

    上回书说到Android动画的分类以及基本使用,这会书主要说Android属性动画的原理,对于View动画的原理本篇不做深入分析.对于Android动画的基础请看深入分析Android动画(一) 我们 ...

  9. 第三部分:Android 应用程序接口指南---第四节:动画和图形---第一章 属性动画及动画与图形概述

    第1章 属性动画及动画与图形概述 Android提供了一系列强大的API来把动画加到UI元素中,以及绘制自定义的2D和3D图像中去.下面的几节将综述这些可用的API以及系统的功能,同时帮你做出最优的选 ...

随机推荐

  1. Android学习笔记Log类输出日志信息

    Log类提供的方法 代码示例 .. Log.e(TAG,"[错误信息]"); Log.w(TAG,"[警告信息]"); Log.i(TAG,"[普通信 ...

  2. Jmeter(十一) - 从入门到精通 - JMeter逻辑控制器 - 下篇(详解教程)

    1.简介 Jmeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in which Samplers are processed.”. 意思 ...

  3. ViewPager2 学习

    ViewPager2 延迟加载数据 ViewPager2 延迟加载数据 ViewPager 实现预加载的方案 ViewPager2 实现预加载的方案 总结 ViewPager 实现预加载的方案 背景 ...

  4. gitbub.com设置协作者提交代码步骤

    1. 邀请协作者 点击settings 2. 等待协作者接受邀请 关注注册邮箱 3. 协作者生成公钥 一路回车即可 ssh-keygen -t rsa -b 4096 -C "公众号:九点半 ...

  5. 流媒体学习计划表——pr

    参考教程 视频:b站oeasy 书籍:<adobe premiere pro cc 2018经典教程> 学习教训 一定要多做--实践是检验真理的唯一标准 书籍补充理论知识,视频讲究实操(理 ...

  6. java scoket aIO 通信

    AsynchronousServerSocketChannel assc.accept(this, new ServerCompletionHandler()); 第一个参数是服务器的处理类,第二个参 ...

  7. PHP时间处理汇总

    PHP时间处理汇总 1.求上个月的开始时间和结束时间 <?php header('Content-Type: text/html; charset=utf-8'); // 上个月的开始时间 $b ...

  8. 如何下载 Ubuntu 镜像文件?

    Ubuntu,是一款基于 Debian Linux 的以桌面应用为主的操作系统,内容涵盖文字处理.电子邮件.软件开发工具和 Web 服务等,可供用户免费下载.使用和分享. 但是对于国内的用户来说如果直 ...

  9. MySQL统计库表大小

    统计每个库每个表的大小是数据治理的其中最简单的一个要求,本文将从抽样统计结果及精确统计结果两方面来统计MySQL的每个库每个表的数据量情况. 1.统计预估数据量 mysql数据字典库informati ...

  10. rhel7 rpmbuild 制作二进制程序安装包(.rpm) 简单示例

    下载rpm-build: # yum install rpm-build 如果上述方式无法安装(没配置网络源,虚拟机下是安装媒介源) 可以用下列方式下载后再安装(实践结果可能版本问题引起的缺少太多的* ...