Android动画之ViewPropertyAnimator(专用于view的属性动画)

2024-05-06 13:48

本文主要是介绍Android动画之ViewPropertyAnimator(专用于view的属性动画),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

动画入门和进阶文章列表:

Animation动画概述和执行原理
Android动画之补间动画TweenAnimation
Android动画之逐帧动画FrameAnimation
Android动画之插值器简介和系统默认插值器
Android动画之插值器Interpolator自定义
Android动画之视图动画的缺点和属性动画的引入
Android动画之ValueAnimator用法和自定义估值器
Android动画之ObjectAnimator实现补间动画和ObjectAnimator自定义属性
Android动画之ObjectAnimator中ofXX函数全解析-自定义Property,TypeConverter,TypeEvaluator
Android动画之AnimatorSet联合动画用法
Android动画之LayoutTransition布局动画
Android动画之共享元素动画
Android动画之ViewPropertyAnimator(专用于view的属性动画)
Android动画之Activity切换动画overridePendingTransition实现和Theme Xml方式实现
Android动画之ActivityOptionsCompat概述
Android动画之场景变换Transition动画的使用
Android动画之Transition和TransitionManager使用
Android动画之圆形揭露动画Circular Reveal

1 ViewPropertyAnimator 概述

属性动画对比原来的视图动画有很多的优点,属性动画可以对所有的对象做动画操作,但Android开发中需要做动画最多的还是View,如果只是对一个view做动画,很少的几个属性还行,如果是对同一个view的十几个属性同时做动画,相信属性动画的写法是比较繁琐的。ViewPropertyAnimator从名字就可以看出是专用于View的属性动画,在API12被提供。ViewPropertyAnimator专用于操作View动画,语法更加简洁,使用更加方便。
developer:https://developer.android.google.cn/reference/android/view/ViewPropertyAnimator

如何获取ViewPropertyAnimator 对象:
ViewPropertyAnimator 没有构造函数,通过View.animate()方法可以方便的获取ViewPropertyAnimator 对象,此时获取的动画对象就专用于操作当前view。

public ViewPropertyAnimator animate() {if (mAnimator == null) {mAnimator = new ViewPropertyAnimator(this);}return mAnimator;
}

ViewPropertyAnimator原理简析
内部利用ValueAnimator实现动画。

用ViewPropertyAnimator 还是ObjectAnimator(ValueAnimator)
如果ViewPropertyAnimator 可以实现的功能尽量用ViewPropertyAnimator ,因为简单快捷。

2 ViewPropertyAnimator基本用法

基本函数

setDuration(); //设置动画时长
setInterpolator(); //设置插值器
setStartDelay(); //设置延迟开始时间
start(); //立刻开始动画
cancel(); //取消动画

ViewPropertyAnimator viewPropertyAnimator = gongxiang.animate();
viewPropertyAnimator.setDuration(2000);
viewPropertyAnimator.alpha(0);

在这里插入图片描述

没有调用开始,如果强制调用开始呢?
没有设置start开始动画,动画依然执行了,说明设置完所有动画之后,动画会自动开始执行,也可以手动调用start函数强制动画立刻执行,后面再添加动画也会执行,只不过会稍晚点。

ViewPropertyAnimator viewPropertyAnimator = gongxiang.animate();
viewPropertyAnimator.setDuration(2000);
viewPropertyAnimator.translationY(300);
viewPropertyAnimator.start();
viewPropertyAnimator.translationX(300);

在这里插入图片描述
明显看到图片先往下走了一段,然后向左的动画才开始执行。

链式操作
ViewPropertyAnimator viewPropertyAnimator = gongxiang.animate().setDuration(2000).translationY(300).scaleX(0.5f);

3 ViewPropertyAnimator 支持的View动画

ViewPropertyAnimator支持的动画:
alpha(float value) 设置View的透明度,value最终值
alphaBy(float value) 设置View的透明度,value是在view当前值的基础上的偏移量,rotation(float value):旋转View,正值顺时针,负值逆时针,value最终值
rotationBy(float value):旋转,在当前值得基础上偏移量
rotationX(float value):绕x轴旋转
rotationXBy(float value):当View旋转的基础上以value为偏移量绕X轴旋转
rotationY(float value):绕Y轴旋转
rotationYBy(float value):在当前旋转的基础上绕Y轴旋转
scaleX(float value):缩放view的X轴方向上的大小
scaleXBy(float value):当前View缩放的基础上,在X轴方向上对view进行缩放
scaleY(float value):缩放view的Y轴方向上的大小
scaleYBy(float value):当前View缩放的基础上,对view的Y轴方向进行缩放
translationX(float value):沿X轴方向平移,value大于0,X轴正方向
translationXBy(float value):带有偏移量的平移
translationY(float value):沿Y轴方向平移,value大于0,沿Y轴正方向平移
translationYBy(float value) :在当前值的基础上,在Y轴方向上平移
x(float value):在当前值的基础上,修改view 的X坐标
xBy(float value):在当前值的基础上,修改view 的X坐标
y(float value):在当前值的基础上,修改View的Y的坐标
yBy(float value):在当前值的基础上,修改View的Y的坐标
z(float value):在当前值的基础上,修改View的Z的坐标
zBy(float value):在当前值的基础上,修改View的Z的坐标

以上函数的执行,会导致相同动画的cancle,以上函数都是除了坐标相关都是以view左上角为坐标原点。

方法都比较简单,下面距几个列子:

首先利用translationX,translationXBy来区分By的意义:
ViewPropertyAnimator viewPropertyAnimator = gongxiang.animate().setDuration(3000).translationY(300);
在这里插入图片描述

ViewPropertyAnimator viewPropertyAnimator = gongxiang.animate().setDuration(3000).translationYBy(300);
在这里插入图片描述

translationYBy 可以多次移动View,translationY多次执行没有效果。

x,y修改在屏幕上的坐标

ViewPropertyAnimator viewPropertyAnimator = gongxiang.animate().setDuration(3000).x(100).y(100);
在这里插入图片描述

rotation ,rotationX,rotationY

ViewPropertyAnimator viewPropertyAnimator = gongxiang.animate().setDuration(2000).rotation(270);
在这里插入图片描述

4 ViewPropertyAnimator 添加监听

监听函数:
withEndAction:指定一个操作在下一个动画结束的时候发生。
withStartAction:指定一个操作在下一个动画开始的时候发生。
setUpdateListener:添加动画属性变化监听
setListener:添加动画状态监听

据观察withEndAction相当于动画开始,withStartAction相当于动画结束。

ViewPropertyAnimator viewPropertyAnimator = gongxiang.animate().setDuration(3000).x(700).y(700).rotation(270).alpha(0.5f).withEndAction(new Runnable() {@Overridepublic void run() {System.out.println("=========withEndAction=======");}
}).withStartAction(new Runnable() {@Overridepublic void run() {System.out.println("=========withStartAction=======");}
}).setUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {);}
}).setListener(new AnimatorListenerAdapter() {@Overridepublic void onAnimationCancel(Animator animation) {super.onAnimationCancel(animation);}@Overridepublic void onAnimationEnd(Animator animation) {super.onAnimationEnd(animation);System.out.println("=========onAnimationEnd=======");}@Overridepublic void onAnimationRepeat(Animator animation) {super.onAnimationRepeat(animation);}@Overridepublic void onAnimationStart(Animator animation) {super.onAnimationStart(animation);System.out.println("=========onAnimationStart=======");}@Overridepublic void onAnimationPause(Animator animation) {super.onAnimationPause(animation);}@Overridepublic void onAnimationResume(Animator animation) {super.onAnimationResume(animation);}
});

在这里插入图片描述
可以看到可以添加setUpdateListener监听,但无法通过这个监听函数监听到当前动画的信息,所以这个监听函数可能用处不大。

这篇关于Android动画之ViewPropertyAnimator(专用于view的属性动画)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/964529

相关文章

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

SpringBoot读取ZooKeeper(ZK)属性的方法实现

《SpringBoot读取ZooKeeper(ZK)属性的方法实现》本文主要介绍了SpringBoot读取ZooKeeper(ZK)属性的方法实现,强调使用@ConfigurationProperti... 目录1. 在配置文件中定义 ZK 属性application.propertiesapplicati

Java反射实现多属性去重与分组功能

《Java反射实现多属性去重与分组功能》在Java开发中,​​List是一种非常常用的数据结构,通常我们会遇到这样的问题:如何处理​​List​​​中的相同字段?无论是去重还是分组,合理的操作可以提高... 目录一、开发环境与基础组件准备1.环境配置:2. 代码结构说明:二、基础反射工具:BeanUtils

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Linux lvm实例之如何创建一个专用于MySQL数据存储的LVM卷组

《Linuxlvm实例之如何创建一个专用于MySQL数据存储的LVM卷组》:本文主要介绍使用Linux创建一个专用于MySQL数据存储的LVM卷组的实例,具有很好的参考价值,希望对大家有所帮助,... 目录在Centos 7上创建卷China编程组并配置mysql数据目录1. 检查现有磁盘2. 创建物理卷3. 创

MySQL 事务的概念及ACID属性和使用详解

《MySQL事务的概念及ACID属性和使用详解》MySQL通过多线程实现存储工作,因此在并发访问场景中,事务确保了数据操作的一致性和可靠性,下面通过本文给大家介绍MySQL事务的概念及ACID属性和... 目录一、什么是事务二、事务的属性及使用2.1 事务的 ACID 属性2.2 为什么存在事务2.3 事务

Kotlin Compose Button 实现长按监听并实现动画效果(完整代码)

《KotlinComposeButton实现长按监听并实现动画效果(完整代码)》想要实现长按按钮开始录音,松开发送的功能,因此为了实现这些功能就需要自己写一个Button来解决问题,下面小编给大... 目录Button 实现原理1. Surface 的作用(关键)2. InteractionSource3.

Spring Cache注解@Cacheable的九个属性详解

《SpringCache注解@Cacheable的九个属性详解》在@Cacheable注解的使用中,共有9个属性供我们来使用,这9个属性分别是:value、cacheNames、key、key... 目录1.value/cacheNames 属性2.key属性3.keyGeneratjavascriptor

Spring Boot 事务详解(事务传播行为、事务属性)

《SpringBoot事务详解(事务传播行为、事务属性)》SpringBoot提供了强大的事务管理功能,通过@Transactional注解可以方便地配置事务的传播行为和属性,本文将详细介绍Spr... 目录Spring Boot 事务详解引言声明式事务管理示例编程式事务管理示例事务传播行为1. REQUI