转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/118961952
本文出自【赵彦军的博客】

文章目录

  • PropertyValuesHolder
  • PropertyValuesHolder 之 ofFloat()、ofInt()讲解
  • 实战-旋转动画
  • 实战-组合动画
  • 总结

PropertyValuesHolder

PropertyValuesHolder这个类的意义就是,它其中保存了动画过程中所需要操作的属性和对应的值。

我们通过ofFloat(Object target, String propertyName, float… values)构造的动画,ofFloat()的内部实现其实就是将传进来的参数封装成 PropertyValuesHolder实例来保存动画状态。在封装成 PropertyValuesHolder实例以后,后期的各种操作也是以PropertyValuesHolder为主的。

创建PropertyValuesHolder实例的函数:

public static PropertyValuesHolder ofFloat(String propertyName, float... values)
public static PropertyValuesHolder ofInt(String propertyName, int... values)
public static PropertyValuesHolder ofObject(String propertyName, TypeEvaluator evaluator,Object... values)
public static PropertyValuesHolder ofKeyframe(String propertyName, Keyframe... values)

PropertyValuesHolder 之 ofFloat()、ofInt()讲解

构造函数:

public static PropertyValuesHolder ofFloat(String propertyName, float... values)
public static PropertyValuesHolder ofInt(String propertyName, int... values)

其中:

参数 描述
propertyName: propertyName: 表示ObjectAnimator需要操作的属性名。即ObjectAnimator 需要通过反射查找对应属性的setProperty()函数的那个property
values: 属性所对应的参数,同样是可变长参数,可以指定多个

ObjectAnimatorofFloat 如下:

public static ObjectAnimator ofFloat(Object target, String propertyName, float... values);

可以看到在 ObjectAnimator.ofFloat中只比 PropertyValuesHolderofFloat多了一个target,其它都是完全一样的!

将构造的PropertyValuesHolder实例设置进 ObjectAnimator:

public static ObjectAnimator ofPropertyValuesHolder(Object target,PropertyValuesHolder... values)

其中:

参数 描述
target: 指需要执行动画的控件
values: 是一个可变长参数,可以传进去多个 PropertyValuesHolder 实例,由于每个 PropertyValuesHolder 实例都会针对一个属性做动画,所以如果传进去多个 PropertyValuesHolder 实例,将会对控件的多个属性同时做动画操作。

实战-旋转动画

我们先用 ObjectAnimator.ofFloat 做一个旋转动画

var rotation = ObjectAnimator.ofFloat(myView, "rotation", 0f, 360f)
rotation.duration = 3000
rotation.start()


下面我们再用 ObjectAnimator.ofPropertyValuesHolder 实现相同的功能。

val holder = PropertyValuesHolder.ofFloat("rotation", 0f, 360f)
var rotation = ObjectAnimator.ofPropertyValuesHolder(myView, holder)
rotation.duration = 3000
rotation.start()

运行起来,可以看到,效果是一样的,效果图我就不放了,你们可以自己试试。

我们再来试试组合动画。

实战-组合动画

我们先用 AnimatorSet 做一个组合

var rotation = ObjectAnimator.ofFloat(myView, "rotation", 0f, 360f)
var translationX = ObjectAnimator.ofFloat(myView, "translationX", 0f, 300f)
var translationY = ObjectAnimator.ofFloat(myView, "translationY", 0f, 300f)val set = AnimatorSet()
set.duration = 3000
set.playTogether(rotation, translationX, translationY)
set.start()

我们把代码运行起来,看看效果:


下面我们用 PropertyValuesHolder 实现一遍。

val rHolder = PropertyValuesHolder.ofFloat("rotation", 0f, 360f)
val xHolder = PropertyValuesHolder.ofFloat("translationX", 0f, 300f)
val yHolder = PropertyValuesHolder.ofFloat("translationY", 0f, 300f)var rotation = ObjectAnimator.ofPropertyValuesHolder(myView, rHolder, xHolder, yHolder)
rotation.duration = 3000
rotation.start()

运行起来,看看效果是一样的。

总结

AnimatorSet 是把多个子动画组合起来,可以理解成把动画做的更大,更复杂。

PropertyValuesHolder 是把一个动画拆解成多个子模块,可以理解成把动画做的更小,更精细。

Android属性动画 PropertyValuesHolder相关推荐

  1. Android 属性动画Property Animation(中)

    Android 属性动画Property Animation(上)介绍了属性动画的概念以及相关的类和接口,本篇来看下具体肿么使用. ValueAnimator ValueAnimator指定整形.浮点 ...

  2. Android 属性动画(一)新手入门

    一.属性动画简介 Android 中动画有很多种,属性动画就是其中的一种.所谓的属性动画,就是在指定的时间内,通过改变对象的属性达到变化效果的动画.在 Android 中,属性动画系统是一个强健的框架 ...

  3. Android 属性动画 详解

    Android 属性动画 详解 Android动画类型: View Animation(即所谓的Tween Animation补间动画):View Animation相当简单,不过只能支持简单的缩放. ...

  4. android动画封装,Android属性动画封装,快速构建动画

    Android实现动画效果的方式主要有帧动画.补间动画.属性动画.关于安桌动画的基础知识可以查看这篇文章Android属性动画完全解析 这里我要讲的是如何快速构建出一个动画效果,如下图: 如果我们用属 ...

  5. Android属性动画 ObjectAnimator

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/118709616 本文出自[赵彦军的博客] 文章目录 ObjectAnimator ...

  6. (转)Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法

    版权声明:本文出自郭霖的博客,转载必须注明出处. 目录(?)[-] ValueAnimator的高级用法 ObjectAnimator的高级用法 转载请注明出处:http://blog.csdn.ne ...

  7. android 属性动画实例,Android属性动画完全解析 中 ,ValueAnimator和ObjectAnimator的高级用法...

    大家好,在上一篇文章当中,我们学习了Android属性动画的基本用法,当然也是最常用的一些用法,这些用法足以覆盖我们平时大多情况下的动画需求了.但是,正如上篇文章当中所说到的,属性动画对补间动画进行了 ...

  8. Android 系统(196)---Android 属性动画

    Android 属性动画 属性动画 总结&攻略 前言 动画的使用 是 Android 开发中常用的知识 本文将详细介绍 Android 动画中 属性动画的原理 & 使用 动画类型 关于 ...

  9. Android 属性动画使用(二)

    首先扯点别的:晚上稍微跑了一会步,然后逛了超市,晚饭喝的南瓜粥,吃了一碗面条,今天不是太饿,现在正一边吃着葡萄一边学习,也是没谁了. 比如说,我们想要实现从0过渡到100,使用ValueAnimato ...

最新文章

  1. from beautifulsoup4 import BeautifulSoup 报错
  2. libevent源码安装及Linux自动编译功能总结
  3. 生成建表脚本up_CreateTable
  4. ASP.NET CORE 之 在IIS上部署MVC项目
  5. 静态方法和实例方法(mark)
  6. iOS设置拍照retake和use按钮为中文简体
  7. 【职场】高薪的条件你满足几条?
  8. 三星Galaxy S21 FE现身Geekbench:骁龙888+6GB运存
  9. php pdf打印横向,如何将pdfFactory打印调整为横向 - 应用技巧 - 常青藤软件工作室...
  10. 《数据挖掘导论》学习 | 第十章 异常检测
  11. 将python图表放入ppt_如何在ppt中嵌入python图表(或图像)并刷新
  12. 顺序结构程序设计实例
  13. 火车进站(出栈顺序问题)
  14. allegro使用汇总 [转贴]
  15. 【Scikit-Learn 中文文档】数据集加载工具 - 用户指南 | ApacheCN
  16. Java开发实用工具
  17. 矩阵等价、相似、合同的定义及性质
  18. 每日时报,以前端技术体系为主要分享课题
  19. 普乐蛙5d车载影院5d飞行影院5d轨道影院体验馆
  20. 2020年低压电工免费试题及低压电工复审模拟考试

热门文章

  1. 10 windows 启动虚拟机报错_Windows 系统如何安装 Docker
  2. matlab超出矩阵索引维度_搜你想看“头条搜索”网页版上线 搜索引擎迎来新玩家...
  3. mac怎么搭建php环境,Mac下快速搭建PHP开发环境
  4. css 边框设置成不透明,css中如何设置半透明边框?
  5. 甘肃省计算机等级考试在线支付,甘肃计算机等级考试入口
  6. arduino 土壤温湿度传感器_智慧农业温室大棚环境监测传感器
  7. 2019.4.27 人工智能培训安装工作记录
  8. ACL 2021 | 为什么机器阅读理解模型会学习走捷径?
  9. 有“声”以来,语音如何识别?
  10. ICLR 2020 开源论文 | 多关系图神经网络CompGCN