技术标签: android 赵彦军 属性动画 Android属性动画 属性动画 zyj属性动画
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/118961952
本文出自【赵彦军的博客】
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)
构造函数:
public static PropertyValuesHolder ofFloat(String propertyName, float... values)
public static PropertyValuesHolder ofInt(String propertyName, int... values)
其中:
参数 | 描述 |
---|---|
propertyName: | propertyName: 表示ObjectAnimator需要操作的属性名。即ObjectAnimator 需要通过反射查找对应属性的setProperty()函数的那个property |
values: | 属性所对应的参数,同样是可变长参数,可以指定多个 |
而 ObjectAnimator
的 ofFloat
如下:
public static ObjectAnimator ofFloat(Object target, String propertyName, float... values);
可以看到在 ObjectAnimator.ofFloat
中只比 PropertyValuesHolder
的 ofFloat
多了一个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 是把一个动画拆解成多个子模块,可以理解成把动画做的更小,更精细。
文章浏览阅读4.2k次。Chinese_rules.cf的使用方法:下载Chinese_rules.cf,把该规则放在SpamAssassin存放规则的目录(一般在/usr/share/spamassassin或/usr/local/etc/mail/spamassassin)。通过wget下载的命令如下:wget -N -P /usr/share/spamassassin www.service-labs.com/dow_spamassassin 中文规则
文章浏览阅读349次,点赞10次,收藏11次。2.SQL语句可以使用空格/缩进来增强语句的可读性。1.SQL语句可以单行或多行书写,以分号结尾。3.MySQL数据库的SQL语句不区分大小写。
文章浏览阅读519次。打开vs,工具-->选项-->项目和解决方案-->在右侧选中"总是显示解决方案"-->确定_vs 无法创建resx清单名称
文章浏览阅读4.2k次,点赞8次,收藏15次。CMC曲线(累计匹配曲线)CMC曲线在人脸识别,行人重识别等领域使用的非常多,但却很少有文章去详细的介绍CMC曲线,这是我在researchgate网页上某个博主主页上找到的关于CMC曲线的介绍,个人觉得通过例子讲解的形式来介绍CMC使得更加通俗易懂,让人一看就明白。以下是原文:I think that understanding a CMC curve is much easierb..._cmc曲线
文章浏览阅读1.3k次,点赞42次,收藏41次。CompletableFuture的异步执行通过ForkJoinPool实现,ForkJoinPool在于可以充分利用多核CPU的优势,把一个任务拆分成多个小任务,把多个小任务放到多个CPU上并行执行,当多个小任务执行完毕后,再将其执行结果合并起来。
文章浏览阅读958次。objShell.SendKeys “{F5}” ’ 模拟鼠标中键点击。WScript.Sleep(300000) ’ 延时5分钟。_windows防锁屏bat脚本
文章浏览阅读1.4k次。一、数据结构与线程构造方法由于已经看到了ThreadPoolExecutor的源码,因此很容易就看到了ThreadPoolExecutor线程池的数据结构。图1描述了这种数据结构。图1 ThreadPoolExecutor 数据结构其实,即使没有上述图形描述ThreadPoolExecutor的数据结构,我们根据线程池的要求也很能够猜测出其数据结构出来。_线程之 1.7 doacquiresharedinterruptibly解析
文章浏览阅读4.8w次,点赞3次,收藏21次。快速获取图片的宽高其实是为了预先做好排版样式布局做准备,通过快速获取图片宽高的方法比onload方法要节省很多时间,甚至一分钟以上都有可能,并且这种方法适用主流浏览器包括IE低版本浏览器。我们一步一步进入这个过程。一、简陋的获取图片方式1234567891011_图片 src和onload 哪个快
文章浏览阅读6.3k次。严重: 在路径为/book的上下文中,Servlet[jsp]的Servlet.service()引发了具有根本原因的异常java.lang.ClassNotFoundException:这种报错,除了其他人的:还有一种可能:名字不一样,哪怕是空格哪怕是一个空格!..._严重: 在路径为/bookmanage的上下文中,servlet[jsp]的servlet.service()引发了具
文章浏览阅读6.2k次。frida-ios-dump源码地址:GitHub - AloneMonkey/frida-ios-dump: pull decrypted ipa from jailbreak devicefrida-ios-dump是基于frida开发的一键砸壳工具,需要配置frida环境手机配置1)越狱状态2)安装openssh3)安装fridaMac配置1)安装frida,命令行:sudo pip install frida-tools (没有安装pip的话需要先安装pip)_ios砸壳需要 闪退怎么砸
文章浏览阅读2.6k次,点赞3次,收藏2次。1.制作系统应用程序。 ios的程序分为mobile和root权限模式,我们一般用xcode开发的app取得的是mobile权限,但是ios越狱后安装的app如:Cydia、91助手、PP助手等均为系统级应用程序。系统级app的好处是:用不无法手动删除、取得完全的root权限、可设置开机启动项等等功能。通过xcode打包的ipa是无法安装成为系统app的,所以我们需要另外一种打包方式:_depends libundirect.depends firmware
文章浏览阅读254次,点赞5次,收藏2次。继承1. 继承的基本概念1.1 继承的定义1.2 继承基类成员访问方式的变化2. 基类和派生类对象赋值转换3. 继承中的作用域1. 继承的基本概念继承是面向对象程序设计使代码复用的最重要的手段,允许在保持原有类特性的基础上进行扩展,增加功能,产生新的类,称为派生类/子类。继承是类设计层次的复用。1.1 继承的定义派生类 : 继承方式 基类class Student : public Person1.2 继承基类成员访问方式的变化父类成员在子类中的访问权限(除过父类中的私有成员):_什么是赋值转换