第七章:Android动画深入分析
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来兼容以前的版本
- 改变一个对象的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动画深入分析的更多相关文章
- 《Android开发艺术探索》读书笔记 (7) 第7章 Android动画深入分析
本节和<Android群英传>中的第七章Android动画机制与使用技巧有关系,建议先阅读该章的总结 第7章 Android动画深入分析 7.1 View动画 (1)android动画分为 ...
- Android群英传》读书笔记 (3) 第六章 Android绘图机制与处理技巧 + 第七章 Android动画机制与使用技巧
第六章 Android绘图机制与处理技巧 1.屏幕尺寸信息屏幕大小:屏幕对角线长度,单位“寸”:分辨率:手机屏幕像素点个数,例如720x1280分辨率:PPI(Pixels Per Inch):即DP ...
- Android 动画深入分析
一些娱乐动画安德鲁斯被广泛使用应用上述的.在不牺牲性能,它可以带来非常好的体验,下面会解释具体的实现安卓动画.知识的学校一个明确清晰的白色. 动画类型 Android的animation由四种类型组成 ...
- Android动画深入分析
动画分类 Android动画可以分3种:View动画,帧动画和属性动画:属性动画为API11的新特性,在低版本是无法直接使用属性动画的,但可以用nineoldAndroids来实现(但是本质还是vii ...
- 七、Android动画
Android的动画可以分为三种:View动画.帧动画和属性动画,帧动画也属于View动画的一种,只不过它和平移.旋转等常见的View动画在表现形式上略有不同而已. 1.View动画 平移动画:Tra ...
- Android群英传笔记——第七章:Android动画机制和使用技巧
Android群英传笔记--第七章:Android动画机制和使用技巧 想来,最 近忙的不可开交,都把看书给冷落了,还有好几本没有看完呢,速度得加快了 今天看了第七章,Android动画效果一直是人家中 ...
- Android 动画animation 深入分析
转载请注明出处:http://blog.csdn.net/farmer_cc/article/details/18259117 Android 动画animation 深入分析 前言:本文试图通过分析 ...
- 深入分析Android动画(二)
上回书说到Android动画的分类以及基本使用,这会书主要说Android属性动画的原理,对于View动画的原理本篇不做深入分析.对于Android动画的基础请看深入分析Android动画(一) 我们 ...
- 第三部分:Android 应用程序接口指南---第四节:动画和图形---第一章 属性动画及动画与图形概述
第1章 属性动画及动画与图形概述 Android提供了一系列强大的API来把动画加到UI元素中,以及绘制自定义的2D和3D图像中去.下面的几节将综述这些可用的API以及系统的功能,同时帮你做出最优的选 ...
随机推荐
- 【JMeter_10】JMeter逻辑控制器__ForEach控制器<ForEach Controller>
ForEach控制器<ForEach Controller> 业务逻辑: ForEach控制器一般与用户自定义变量/JDBC结果变量一起使用,可以认为他就是一种遍历型循环,该节点下的脚本内 ...
- PyCharm远程连接服务器简明教程
转自本人知乎(https://zhuanlan.zhihu.com/p/149040742) 由于实验室的GPU都是放在远程服务器上,因此一直使用MobaXterm利用SSH远程跑实验,但是MobaX ...
- java soket通信总结 bio nio aio的区别和总结
1 同步 指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪 自己上街买衣服,自己亲自干这件事,别的事干不了. 2 异步 异步是指用户进程触发IO操作以后便开始做自己的事情,而当IO操作 ...
- 观察者模式(Observer Pattern)(二):HeadFirst中的气象站的实现
1 观察者模式的原理,首先由一个主题,当主题发送变化的时候,通知该主题的订阅者 按照上面的分析我们来进行设计 1.抽象主题Subject public interface Subject { publ ...
- cookie和session及token
cookie,session傻傻分不清楚? 做了这么多年测试,还是分不清什么是cookie,什么是session?很正常,很多初级开发工程师可能到现在都搞不清什么是session,cookie相对来说 ...
- 洛谷 P2298 【Mzc和男家丁的游戏 】
这道题还是挺水的,广搜模板题,注意一下细节就是了. :码代上上代码: #include <bits/stdc++.h> using namespace std; int n , m , s ...
- Python 实现短信轰炸机
原理其实很简单,就是利用selenium包打开各种网站的注册页,输入轰炸的号码,实现轰炸.其实也算是利用了注册漏洞.申明:仅娱乐使用,禁止️用于非法用途!若用于非法用途,后果及法律责任博主一律不承担 ...
- ant design pro: protable控件隐藏【收起】按钮
[collapseRender:()=>false] [效果] [参考ProTable源码]
- AspNetCore&Coding持续集成
对于现有很多持续集成工具来讲,功能越来越高级,使用了 Coding 有大半年时间,越发觉好用,特别是没钱续费服务器时,找到了新的羊毛. 一.众多持续集成工具 现在可用的持续集成工具繁多,各大云服务商都 ...
- 每日一题 - 剑指 Offer 44. 数字序列中某一位的数字
题目信息 时间: 2019-07-01 题目链接:Leetcode tag: 规律 难易程度:中等 题目描述: 数字以0123456789101112131415-的格式序列化到一个字符序列中.在这个 ...