一、属性动画

  • ObjectAnimator

    ObjectAnimator是属性动画框架中最重要的实行类,创建一个ObjectAnimator只需通过他的静态工厂类直接返回一个ObjectAnimator对象。参数包括一个对象和对象的属性名字,但这个属性必须有get和set函数,内部会通过JAVA反射机制来调用set函数修改属性值,同样,你也可以调用setInterpolator设置相信的差值器。

    例子:实现平移动画:

      /**
* view:需要实现动画效果的view
* "translationX":需要什么动画
* 300:可变参数数组,需要传进改属性的一个取值过程
*/
ObjectAnimator animator=ObjectAnimator.ofFloat(view,"translationX",300);
animator.setDuration(2000);
animator.start();

    使用ObjectAnimator的时候,操纵的属性必须要有get和set方法,但是一般内部都会自己创建。

    下面是一些常用的可以直接使用属性动画的属性值:

      translationX和translationY:这连个属性为平移,从view左上角坐标开始位置

      rotation、rotationX和rotationY:围绕支点2D和3D旋转

      scaleX和 scaleY:围绕支点2D缩放

      pivotX和pivoY:这个是控制支点位置,支点控制着旋转和缩放,默认为view中点为支点

      x和y:View最终位置,它是最初是view左上角坐标和translationX、translationY值的累积和

      alpha:透明度,默认为1(不透明),0位完全透明。

  • PropertyValuesHolder

    类似视图动画中的AnimationSet

    例子:

     /**
* view将先缩小,透明度慢慢变为0,在慢慢放大,透明度变为1
*/
PropertyValuesHolder pvh1 = PropertyValuesHolder.ofFloat("scaleX", 1f, 0f, 1f);
PropertyValuesHolder pvh2 = PropertyValuesHolder.ofFloat("scaleY", 1f, 0f, 1f);
PropertyValuesHolder pvh3 = PropertyValuesHolder.ofFloat("alpha",1f, 0f, 1f);
ObjectAnimator.ofPropertyValuesHolder(view, pvh1, pvh2, pvh3).setDuration(4000).start();
  • ValueAnimtor

    属性动画的核心所在,ObjectAnimator继承于它

 ValueAnimator animator = ValueAnimator.ofFloat(0, 1);
animator.setTarget(view);
animator.setDuration(2000).start();
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
Float value = (Float) valueAnimator.getAnimatedValue();//拿到value然后进行操作 value由0-->1
view.setAlpha(value);
}
});
  • 动画监听
 ObjectAnimator animator = ObjectAnimator.ofFloat(imageView, "alpha",1f, 0f, 1f);
animator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animator) { } @Override
public void onAnimationEnd(Animator animator) { } @Override
public void onAnimationCancel(Animator animator) { } @Override
public void onAnimationRepeat(Animator animator) { }
}); animator.start();

    我们一般只用到end这个方法,android提供了另外一个方法:

animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
}
});
  • Animatorset

    对于一个属性同时作用多个属性动画效果,前面已经用PropetryValuesHolder实现了这样的效果。而AnimatorSet不仅能实现这样的效果,同时也能实现更为精确的顺序控制。

     ObjectAnimator animator1 = ObjectAnimator.ofFloat(imageView, "scaleX", 1f, 0f, 1f);
ObjectAnimator animator2 = ObjectAnimator.ofFloat(imageView, "scaleY", 1f, 0f, 1f);
ObjectAnimator animator3 = ObjectAnimator.ofFloat(imageView, "alpha", 1f, 0f, 1f); AnimatorSet set = new AnimatorSet();
set.setDuration(2000);
set.playTogether(animator1, animator2, animator3);//顺序依次是1-->2-->3
set.start();

    在AnimatorSet正是通过playTogether()、playSequentially()、animSet.play().with()、defore()、after()这些方法来控制多个动画的协同工作方式,从而做到对动画播放顺序的精确控制。

  • 在xml中使用属性动画

    在res文件中创建文件夹:animator,在这个文件夹里面创建objectAnimator资源文件

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:propertyName="scaleX"
android:valueFrom="1.0"
android:valueTo="2.0"
android:valueType="floatType"> </objectAnimator>
  Animator animator = AnimatorInflater.loadAnimator(this, R.animator.test);
animator.setTarget(view);
animator.start();
  • view的animate方法

    animate方法可以理解为属性动画的一种简写方式

        view.animate().alpha(0).y(300).setDuration(300).withStartAction(new Runnable() {
@Override
public void run() { }
}).withEndAction(new Runnable() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() { }
});
}
}).start();

二、布局动画

   所谓的布局动画是指作用的ViewGroup上,给ViewGroup增加子View时添加一个动画过度效果。

   在ViewGroup的xml中添加和这个属性:

android:animateLayoutChanges="true"

   这个效果是android默认的显示的过度效果,我们无法自定义,需要自在定义的过度效果则需要使用LayoutAnimationController类来自定义一个。

     /**
* 第一个参数:需要作用的时间
* 第二个参数:每个子view显示的delay时间
* 当第二个参数不为0的时候可以设置View的显示顺序:
* LayoutAnimationController.ORDER_NORMAL:顺序
* LayoutAnimationController.ORDER_RANDOM:随机
* LayoutAnimationController.ORDER_REVERSE:反序
*
*/
AlphaAnimation animation = new AlphaAnimation(0, 1);
animation.setDuration(2000);
LayoutAnimationController lac=new LayoutAnimationController(animation);
lac.setOrder(LayoutAnimationController.ORDER_REVERSE);
rl.setLayoutAnimation(lac);

  xml中设置:

android 属性动画和布局动画p165-p171的更多相关文章

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

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

  2. 自定义ViewGroup添加布局动画

    声明几个属性值: <declare-styleable name="GridImageViewGroup"> <attr name="childVert ...

  3. Android动画:模拟开关按钮点击打开动画(属性动画之平移动画)

    在Android里面,一些炫酷的动画确实是很吸引人的地方,让然看了就赏心悦目,一个好看的动画可能会提高用户对软件的使用率.另外说到动画,在Android里面支持3种动画: 逐帧动画(Frame Ani ...

  4. Android中的布局动画

    简介 布局动画是给布局的动画,会影响到布局中子对象 使用方法 给布局添加动画效果: 先找到要设置的layout的id,然后创建布局动画,创建一个LayoutAnimationController,并把 ...

  5. Android属性动画之ValueAnimation

    ValueAnimation是ObjectAnimation类的父类,经过前几天的介绍,相信大家对ObjectAnimation有了 一定的认识,今天就为大家最后介绍一下ValueAnimation, ...

  6. Android Animation学习(五) ApiDemos解析:容器布局动画 LayoutTransition

    Android Animation学习(五) ApiDemos解析:容器布局动画 LayoutTransition Property animation系统还提供了对ViewGroup中的View改变 ...

  7. Android属性动画完全解析(上),初识属性动画的基本用法

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/43536355 在手机上去实现一些动画效果算是件比较炫酷的事情,因此Android系 ...

  8. Android 属性动画(Property Animation) 完全解析 (上)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38067475 1.概述 Android提 供了几种动画类型:View Anima ...

  9. Android属性动画完全解析(中)

    转载:http://blog.csdn.net/guolin_blog/article/details/43536355 大家好,在上一篇文章当中,我们学习了Android属性动画的基本用法,当然也是 ...

随机推荐

  1. 聚合的安全类导航、专业的安全知识学习平台——By Me:)

    以“基于对抗的安全研发”为初衷,让大家在工作中始终有安全意识.安全思维和安全习惯,几年前自己搭建了面向公司内部全员的安全晨报.现在站在“用户“的角度回头看看,觉得科目设计等很多方面都还有很多的不足: ...

  2. 常用模块(hashlib,configparser,logging)

    常用模块(hashlib,configparser,logging) hashlib hashlib 摘要算法的模块md5 sha1 sha256 sha512摘要的过程 不可逆能做的事:文件的一致性 ...

  3. ipv6被拒的解决方法

    A,检测服务器是否支持ipv6连接 用mac 搭建IPv6环境测试,只能测试客户端到mac这段网络正常,但是mac到服务器还是IPv4的,所以没有办法测试服务器的IPv6是否正常.可以用手机打开2)步 ...

  4. 转:Oracle中的日期和字符串互相转换

    TO_DATE格式(以时间:2007-11-02   13:45:25为例)          Year:             yy two digits 两位年                显 ...

  5. js验证真实姓名

    var regName = /^[\u4e00-\u9fa5]{2,4}$/; if (!regName.test(examinee.name)) { wx.showToast({ title: &q ...

  6. SpringBoot之Servlet、Filter、Listener配置

    在SpringBoot中是不需要配置web.xml的,那么原来在web.xml中配置的Servlet.Filter.Listener现在怎么弄呢? SpringBoot提供了三种Bean Filter ...

  7. 一步一步教你读懂NET中IL

    .NET CLR 和 Java VM 都是堆叠式虚拟机器(Stack-Based VM),也就是说,它们的指令集(Instruction Set)都是采用堆叠运算的方式:执行时的资料都是先放在堆叠中, ...

  8. 单元测试框架unittest,ddt

    unittest case.py 测试用例 suite.py 测试套件 loader.py 加载测试用例 run.py 执行测试用例 result.py 测试结果,测试报告 main mock 模拟测 ...

  9. 蓝屏代码大全 & 蓝屏全攻略

    转载自http://diybbs.zol.com.cn/15/86_141447.html 一.蓝屏含义 1.故障检查信息 ***STOP 0x0000001E(0xC0000005,0xFDE38A ...

  10. LINUX系统运行查看

    1.查看内存使用情况 free -m 2.查看内存,cpu等使用情况排序,使用ps -aux命令 ps -aux --sort=+rss :按内存升序排列 ps -aux --sort=-rss :按 ...