从android3.0,系统提供了一个新的动画-property animation, 为什么系统会提供这样一个全新的动画包呢,先来看看之前的补间动画都有什么缺陷吧

1、传统的补间动画都是固定的编码,功能是固定的,扩展难度大。比如传统动画只能实现移动、缩放、旋转、淡入淡出,四种效果,如果去改变view的背景,就只能自己去实现。
2、补间动画只是改变了view的显示效果,不会真正改变view的属性,比如一个动画的点击时间,view移动到另一个地方,它的监听事件还在换来的地方。
3、传统动画不能对非view的对象进行动画操作。
这估计就是property animation出现的原因了吧,说了这些来看看android.animation里面都有什么东西吧

ValueAnimator
ValueAnimator是整个动画机制当中最核心的一个类,属性动画中主要的时序引擎,如动画的时间,开始、结束属性值,ValueAnimator还负责管理动画的播放次数,播放模式,以及对动画设计监听器。

ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f);
anim.setDuration(300);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {  @Override  public void onAnimationUpdate(ValueAnimator animation) {  float currentValue = (float) animation.getAnimatedValue();  Log.d("TAG", "cuurent value is " + currentValue);  }
});
anim.start();

ObjectAnimator
允许你指定要进行动画的对象以及该对象的一个属性。该类会根据计算得到的新值自动更新属性。ValueAnimator是对值进行了一个平滑的动画过渡,而objectAnimator则可以直接对任意对象的属性进行动画操作。
fter(Animator anim) 将现有动画插入到传入的动画之后执行
after(long delay) 将现有动画延迟指定毫秒后执行
before(Animator anim) 将现有动画插入到传入的动画之前执行
with(Animator anim) 将现有动画和传入的动画同时执行

ObjectAnimator animator = ObjectAnimator.ofFloat(textview, "alpha", 1f, 0f, 1f);
animator.setDuration(5000);
animator.start();  

AnimatorSet
使动画组合到一起,并可设置组中动画的时序关系,如同时播放,有序播放或延迟播放。

ObjectAnimator moveIn = ObjectAnimator.ofFloat(textview, "translationX", -500f, 0f);
ObjectAnimator rotate = ObjectAnimator.ofFloat(textview, "rotation", 0f, 360f);
ObjectAnimator fadeInOut = ObjectAnimator.ofFloat(textview, "alpha", 1f, 0f, 1f);
AnimatorSet animSet = new AnimatorSet();
animSet.play(rotate).with(fadeInOut).after(moveIn);
animSet.setDuration(5000);
animSet.start();  

Interpolator
先看一下TimeInterpolator接口的定义,

public interface TimeInterpolator {  /** * Maps a value representing the elapsed fraction of an animation to a value that represents * the interpolated fraction. This interpolated value is then multiplied by the change in * value of an animation to derive the animated value at the current elapsed animation time. * * @param input A value between 0 and 1.0 indicating our current point *        in the animation where 0 represents the start and 1.0 represents *        the end * @return The interpolation value. This value can be more than 1.0 for *         interpolators which overshoot their targets, or less than 0 for *         interpolators that undershoot their targets. */  float getInterpolation(float input);
}  

getInterpolation()方法中接收一个input参数,这个参数的值会随着动画的运行而不断变化,不过它的变化是非常有规律的,就是根据设定的动画时长匀速增加,变化范围是0到1。动画一开始input的值是0, 结束时input的值是1, 而中间值则是随着动画运行的时长在0到1之间变化。
ViewPropertyAnimator
为了方便对view的动画操作,在android3.1补充了ViewPropertyAnimator这个机制。

PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("x", 50f);
PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("y", 100f);
ObjectAnimator.ofPropertyValuesHolder(myView, pvhX, pvyY).start();
myView.animate().x(50f).y(100f);

为ViewGroup添加布局动画
可以在ViewGroup内,通过LayoutTransition类为布局的变化添加动画。
当一个ViewGroup中添加或者移除某一个item,或者调用了View的setVisibility方法,使得View 变得VISIBLE或者GONE的时候,在ViewGroup内部的View可以完成出现或者消失的动画。当你添加或者移除View的时候,那些剩余的View也可以通过动画的方式移动到自己的新位置。你可以通过setAnimator()方法并传递一个Animator对象,在LayoutTransition内部定义以下动画。以下是几种事件类型的常量:

APPEARING        为那些添加到父元素中的元素应用动画
CHANGE_APPEARING    为那些由于父元素添加了新的item而受影响的item应用动画
DISAPPEARING       为那些从父布局中消失的item应用动画
CHANGE_DISAPPEARING  为那些由于某个item从父元素中消失而受影响的item应用动画

你可以为这四种事件定义自己的交互动画,或者仅仅告诉动画系统使用默认的动画。
API Demos中的LayoutAnimations sample向你展示了如何为布局转换定义一个布局动画,然后将该动画设置到目标View对象上
Keyframes
由一个键值对组成,可以为动画定义某一特定时间的特定状态。每个keyframe可以拥有自己的插值器,用于控制前一帧和当前帧的时间间隔间内的动画。第一个参数为:要执行该帧动画的时间节点(elapsed time / duration),第二个参数为属性值。

Keyframe kf0 = Keyframe.ofFloat(0f, 0f);
Keyframe kf1 = Keyframe.ofFloat(.5f, 360f);
Keyframe kf2 = Keyframe.ofFloat(1f, 0f);
PropertyValuesHolder pvhRotation = PropertyValuesHolder.ofKeyframe(“rotation”, kf0, kf1, kf2);//动画属性名,可变参数
ObjectAnimator rotationAnim = ObjectAnimator.ofPropertyValuesHolder(target, pvhRotation)
rotationAnim.setDuration(5000ms);

android动画笔记二相关推荐

  1. 【转】浅析Android动画(二),属性动画高级实例探究

    2019独角兽企业重金招聘Python工程师标准>>> ObjectAnimator实现属性动画 为了写好Android动画这几篇博客,在动笔之前我是下过很大决心的,我对自己的要求是 ...

  2. 第一行代码 Android读书笔记(二)

    第一行代码 Android读书笔记 第三章 软件也要拼脸蛋-UI开发的点点滴滴 常用控件的使用方法 详解4种基本布局 自定义控件 最常用和最难用的控件-ListView 更加强大的滚动控件-Recyc ...

  3. android 动画原理二

    简介: 这是由两部分组成的 Android 动画框架详解的第二部分实例篇.在阅读本篇之前,建议您首先阅读本系列的第一部分 Android 动画框架详解之原理篇.原理篇详细介绍了 Android 动画框 ...

  4. Android动画框架(二)----属性动画

    转载请注明出处:http://blog.csdn.net/fishle123/article/details/50705928 Android提供三种形式动画:视图动画,帧动画,属性动画.其中属性动画 ...

  5. Android 动画(二)

    以下演示如何通过代码创建动画 1>activity_main.xml布局文件的代码如下: <RelativeLayout xmlns:android="http://schema ...

  6. Android 动画(二) 实战演示——仿网易新闻安卓端菜单栏动画

    欢迎转载,转载请注明出处: http://blog.csdn.net/u010181592 经过上一篇博客 的动画基础知识积累,这次来实战一下,模仿网易新闻 安卓客户端右上角菜单栏出现的动画,效果是这 ...

  7. android英语笔记二

    1.banner 旗帜 2.android studio 如何找到类的出处,右键选择"Find Usages" 3.subject n. 主题,话题;学科,科目;[哲]主观 adj ...

  8. Android动画效果(二) 仿QQ点赞动画

    近日有看到QQ点赞的动画效果,于是模仿写了一个 要实现图中效果,需要用到属性动画,属性动画利用ValueAnimator来跟踪记录对象属性已经变化了多长时间及当前这个时间点的值. 如果不设置的话,动画 ...

  9. [Android学习笔记二] View转化Bitmap

    在View类中的onDraw方法的参数Canvas是View绘制的背景,要将View转换为Bitmap实际上就是让Canvas上的绘制操作绘制到Bitmap上. View转化为Bitmap也称为截屏, ...

最新文章

  1. java 高并发解决方案
  2. hadoop基本命令
  3. redis连接池操作
  4. Spring学习使用标签来标记资源(@Component、@Repository、 @Service和@Controller)和用法(包括如何jsp正在使用)...
  5. KMP子字符串匹配算法学习笔记
  6. 58技术主席:还原万亿级三高业务场景的设计与实践
  7. PythonBasics 中文系列教程 · 翻译完成
  8. PowerDesigner物理模型用法总结
  9. 判断操作系统类型的多种方法
  10. 如何提升沟通技能与提出解决方案
  11. 金格pdf打开服务器文件,金格插件解决方法.pdf
  12. 示波器的使用和李萨如图形
  13. 系统语言在C盘什么地方,Win7桌面文件在C盘哪里?|Win7系统桌面文件在哪?
  14. [算法]Fibonacci数列O(n)和O(lgn)的解法
  15. 蓦然认知全球发布会:用新的技术引擎为设备商和传统企业赋能丨Xtecher 观察
  16. 报价单和价目表制作的软件app
  17. 【Flask】学习笔记 #12 —— JinJa2模板继承与引入
  18. CCF201509-1数列分段(C语言)
  19. 【math】Hiden Markov Model 隐马尔可夫模型了解
  20. 模糊照片怎么修复清晰?快来看看这两个方法

热门文章

  1. [C/C++]关于C++11中的std::move和std::forward
  2. Linux下Modules的概念及使用详解
  3. C/C++中NULL指针
  4. Java进阶面试资料无偿分享!真香系列
  5. Laravel 除了首页能正常访问,其它页面均404
  6. vs2015web项目无法加载64位c++的dll,提示试图加载不正确的格式
  7. scott登录查询常用语句
  8. Java 微信公众号导出所有粉丝(openId)
  9. Delphi读写二进制文件
  10. 在windows storage server 2008上创建iscsi磁盘