Property动画

概念:属性动画,即通过改变对象属性的动画。

特点:属性动画真正改变了一个UI控件,包括其事件触发焦点的位置

一、重要的动画类及属性值:

1、  ValueAnimator 基本属性动画类

方法

描述

setDuration(long duration)

设置动画持续时间的方法

setEvaluator(TypeEvaluator value)

设置插值计算的类型

setInterpolator(TimeInterpolator value)

设置时间插值器的类型

addUpdateListener(ValueAnimator.AnimatorUpdateListener listener)

更新动画对象的监听事件

setRepeatCount(int value)

设置动画重复执行的次数

setRepeatMode(int value)

设置动画重复方式

addListener(Animator.AnimatorListener l)

设置监听事件

1、  动画开始时的监听

2、  动画结束时的监听

3、  动画重新开始时的监听

start()

开始执行动画

cancel()

停止当前执行的动画,属性值会停止在当前执行位置

end()

结束动画,属性值会停止在结束位置,即使没有播放完动画

2、  ObjectAnimator 对象属性动画类,继承自ValueAnimator

方法

描述

  • ofFloat(T target, Property<T, Float> property, float... values)

第一个参数为执行动画的对象。第二个值为属性,之后为一个不确定数目的float类型的变化值

  • ofInt(T target, Property<T, Integer> property, int... values)

第一个参数为执行动画的对象。第二个值为属性,之后为一个不确定数目的int类型的变化值

  • ofObject(Object target, String propertyName, TypeEvaluator evaluator, Object... values)

第一个参数为执行动画的对象。第二个值为属性,之后为一个不确定数目的object类型的变化值

setTarget(Object target)

设置执行动画的对象

3、  TimeInterpolator 时间插值器

设置动画执行的动作效果

Eg:animator.setInterpolator(new BounceInterpolator() //设置动画效果为跳跃

类型

描述

AccelerateInterpolator

加速,开始时慢中间加速

DecelerateInterpolator

减速,开始时快然后减速

AccelerateDecelerateInterolator

先加速后减速,开始结束时慢,中间加速

AnticipateInterpolator

反向 ,先向相反方向改变一段再加速播放

AnticipateOvershootInterpolator

反向加超越,先向相反方向改变,再加速播放,会超出目的值然后缓慢移动至目的值

BounceInterpolator

跳跃,快到目的值时值会跳跃,如目的值100,后面的值可能依次为85,77,70,80,90,100

CycleIinterpolator

循环,动画循环一定次数,值的改变为一正弦函数:Math.sin(2 * mCycles * Math.PI * input)

LinearInterpolator

线性,线性均匀改变

OvershottInterpolator

超越,最后超出目的值然后缓慢改变到目的值

4、  PropertyValuesHolder

作用:对一个View执行多个属性动画,该类对多属性动画进行了优化,会合并一些invalidate()来减少刷新视图,该类在3.1中引入

5、TypeEvaluator  插值计算的类型

(1)、IntEvaluator:属性的值类型为int

(2)、FloatEvaluator:属性的值类型为float

(3)、ArgbEvaluator:属性的值类型为十六进制颜色值

6、常用动画属性

(1)translationX,translationY:移动坐标

(2)rotation,rotationX,rotationY:旋转,rotation用于2D旋转角度,3D中用到后两个

(3)scaleX,scaleY:缩放

(4)alpha:透明度

(5)backgroundColor:  背景

二、动画Demo

1、位移动画

 ValueAnimator animator = ObjectAnimator.ofFloat(image, "translationY", );//第一个参数为执行动画的对象 ImageView第二个参数为动画属性:y轴位移 ,第三个参数为value
//动画执行的事件
animator.setDuration();
animator.setRepeatCount(ValueAnimator.INFINITE); //设置循环次数:无限
animator.setRepeatMode(ValueAnimator.REVERSE); //设置循环方式:倒叙循环 // 设置加速效果
// animator.setInterpolator(new AccelerateDecelerateInterpolator());
animator.setInterpolator(new BounceInterpolator()); //设置弹跳效果
animator.start();

效果:

2、绕X轴旋转动画

 ValueAnimator animator = ObjectAnimator.ofFloat(image, "rotationX", ,); 
              //第一个参数为执行动画的对象ImageView 第二个参数为动画属性,第三个参数为初始角度,第四个动画为结束角度
animator.setDuration();
animator.setRepeatCount(ValueAnimator.INFINITE);
animator.setRepeatMode(ValueAnimator.REVERSE);
animator.start();

效果图:

3、图片绕xy轴转动,两个属性动作的情况

1             PropertyValuesHolder pvh1 = PropertyValuesHolder.ofFloat("rotationY",0f,45f,90f,160f,260f,360f );
PropertyValuesHolder pvh2 = PropertyValuesHolder.ofFloat("rotationX",0f,360f ); ValueAnimator animator = ObjectAnimator.ofPropertyValuesHolder(image,pvh1,pvh2);//将多个需要并发执行的动画合并执行
animator.setDuration();
animator.setRepeatCount(ValueAnimator.INFINITE);
animator.setRepeatMode(ValueAnimator.REVERSE);
animator.start();

效果图:

4、多个属性动画一起执行的情况

        AnimatorSet aSet = new AnimatorSet();
ValueAnimator a1 = ObjectAnimator.ofFloat(image,"translationX",0f,200f);
a1.setDuration(); ValueAnimator a2 = ObjectAnimator.ofFloat(1f,1.5f,1.0f);
a2.addUpdateListener(new AnimatorUpdateListener() { @Override
public void onAnimationUpdate(ValueAnimator animation) {
// TODO Auto-generated method stub
//更新对象的属性的方法
float value = (Float) animation.getAnimatedValue();
image.setScaleX(value);
image.setScaleY(value); }
});
a2.setDuration(); //旋转
ValueAnimator a3 = ObjectAnimator.ofFloat(image,"rotation",0f,);
a3.setDuration(); //渐变
ValueAnimator a4 = ObjectAnimator.ofFloat(image,"alpha",1f,0f);
a4.setDuration(); aSet.play(a1).with(a3);
aSet.play(a2).after(a3);
aSet.play(a2).with(a4); aSet.start();

效果图:

5、布局背景动画

 //改变主布局的背景实现动画效果
animator = ObjectAnimator.ofInt(linearLayout,"backgroundColor",Color.WHITE,Color.BLUE,Color.GREEN,Color.RED);
//设置颜色值得差值类型
animator.setEvaluator(new ArgbEvaluator());
animator.setDuration();
animator.setRepeatCount(ValueAnimator.INFINITE);
animator.setRepeatMode(ValueAnimator.REVERSE);
animator.start();

效果图:

--------------------------------------------------------------------------------------------------------------------------------

相关知识:

安卓开发_浅谈Android动画(一)

安卓开发_浅谈Android动画(二)

安卓开发_浅谈Android动画(三)

安卓开发_浅谈Android动画(四)的更多相关文章

  1. 安卓开发_浅谈Android动画(二)

    在学习了四个基本动画之后,现在要学习一些更有用的效果 先给出所有的动画xml <?xml version="1.0" encoding="utf-8"?& ...

  2. 安卓开发_浅谈Android动画(一)

    动画效果,针对图片实现 现在学习四种基本的简单动画效果 一.Tween Animation共同属性 1.Duration:动画持续时间(毫秒单位) 2.fillAfter:设置为true,动画转化在动 ...

  3. 安卓开发_浅谈Android动画(三)

    一.LayoutAnimation布局动画 用于为一个layout里面的控件,或者是一个ViewGroup里面的控件设置动画效果 在res-anim文件下新建一个动画xml文件 <?xml ve ...

  4. 安卓开发_浅谈ListView(SimpleAdapter数组适配器)

    安卓开发_浅谈ListView(ArrayAdapter数组适配器) 学习使用ListView组件和SimapleAdapter适配器实现一个带图标的ListView列表 总共3部分 一.MainAc ...

  5. 安卓开发_浅谈ListView(自定义适配器)

    ListView作为一个实际开发中使用率非常高的视图,一般的系统自带的适配器都无法满足开发中的需求,这时候就需要开发人员来自定义适配器使得ListView能够有一个不错的显示效果 有这样一个Demo ...

  6. 安卓开发_浅谈Fragment之ListFragment

    ListFragment,即Fragment的一个子类,当我们用的一个Fragment只需要一个listview视图的时候使用 该类有几个特点: 1.ListFragment 本身具只有一个ListV ...

  7. 安卓开发_浅谈OptionsMenus(选项菜单)

    Android平台下所提供的菜单大体上可分为三类:选项菜单.上下文菜单和子菜单. 当Activity在前台运行时,如果用户按下手机上的Menu键,此时就会在屏幕低端弹出相应的选项菜单.但这个功能需要开 ...

  8. 安卓开发_浅谈Notification(通知栏)

    Notification通知栏是显示在手机状态的消息,代表一种全局效果的通知 快速创建一个Notification的步骤简单可以分为以下四步: 第一步:通过getSystemService()方法得到 ...

  9. 安卓开发_浅谈AsyncTask

    现在就来学习一下AsyncTask. 一.先介绍一下AsyncTask: 在开发Android移动客户端的时候往往要使用多线程来进行操作,我们通常会将耗时的操作放在单独的线程执行,避免其占用主线程而给 ...

随机推荐

  1. [转]c#截取指定长度的字符串

    /// <summary> /// 截取指定長度的字符串 /// </summary> /// <param name="s"></par ...

  2. shell Builtin variables(shell内建变量)

    内容来自:abs-guide $BASH The path to the Bash binary itself bash$ echo $BASH /bin/bash $BASH_ENV An envi ...

  3. Struts2知多少(2) Struts2 是什么

    Struts2是流行和成熟的基于MVC设计模式的Web应用程序框架. Struts2不只是Struts1下一个版本,它是一个完全重写的Struts架构. WebWork框架开始以Struts框架为基础 ...

  4. Eclipse为Unity3d编写jar组件

    Unity3d和Android的交互有两种方式: (1)使用Eclipse为Unity3d编写库,也就是jar包,然后导入到U3D中使用: (2)将Unity3d项目导出为Android项目,然后直接 ...

  5. CentOS linux系统搭建LAMP环境

    准备工作: 1.配置防火墙,开启80端口.3306端口vi /etc/sysconfig/iptables-A INPUT -m state –state NEW -m tcp -p tcp –dpo ...

  6. Tomcat Clustering - A Step By Step Guide --转载

    Tomcat Clustering - A Step By Step Guide Apache Tomcat is a great performer on its own, but if you'r ...

  7. Frame - 快速创建高品质的 Web 应用原型

    Frame 是一个让你够能够快速创建高品质的网站或应用程序产品原型的工具.你上传的图片将被包裹在真实的设备环境中.它是一个用于创建宣传资料的专业工具.Frame 完全免费供给商业和个人使用.他们也正探 ...

  8. mysql按汉语拼音首字母排序

      如果数据表table的某字段name的字符编码是utf8_general_ci :   SELECT *  FROM `table` ORDER BY convert(name USING gbk ...

  9. 通过Nginx实现负载均衡

    百度了下负载均衡:英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器.FTP服务器.企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务 嗯,跟我理 ...

  10. U3D自定义Inspector项未触发保存事件的解决方案

    1.问题描述与解决方案 1.1.说明 应该只有起步做U3D编辑器插件的部分同行需要了解本文. 该问题源于在做UI插件的时候,发现Inspector面板上手动修改值后,没有触发U3D编辑器本身的修改事件 ...