Andorid 属性动画ObjectAnimation整理

news2025/1/16 14:03:20

属性动画相关内容可参考官网
动画资源
属性动画概览

来自官网的说明,

属性动画与视图动画的区别

视图动画系统仅提供为 View 对象添加动画效果的功能,因此,如果您想为非 对象添加动画效果,则必须实现自己的代码才能做到。视图动画系统也存在一些限制,因为它仅公开 对象的部分方面来供您添加动画效果;例如,您可以对视图的缩放和旋转添加动画效果,但无法对背景颜色这样做。

视图动画系统的另一个缺点是它只会在绘制视图的位置进行修改,而不会修改实际的视图本身。例如,如果您为某个按钮添加了动画效果,使其可以在屏幕上移动,该按钮会正确绘制,但能够点击按钮的实际位置并不会更改,因此您必须通过实现自己的逻辑来处理此事件。

有了属性动画系统,您就可以完全摆脱这些束缚,还可以为任何对象(视图和非视图)的任何属性添加动画效果,并且实际修改的是对象本身。属性动画系统在执行动画方面也更为强健。概括地讲,您可以为要添加动画效果的属性(例如颜色、位置或大小)分配 Animator,还可以定义动画的各个方面,例如多个 Animator 的插值和同步。

不过,视图动画系统的设置需要的时间较短,需要编写的代码也较少。如果视图动画可以完成您需要执行的所有操作,或者现有代码已按照您需要的方式运行,则无需使用属性动画系统。在某些用例中,也可以针对不同的情况同时使用这两种动画系统。

开始使用。

单个动画使用 ObjectAnimator ,复合动画使用 AnimatorSet

Demo 图说明,动画作用在图片上。图片显示在左上角,图片右侧和下方的线是为了方便看出 View 动画前后的位置、大小对比,无实际作用。
在这里插入图片描述

平移

改变对象的 translationX 、translationY 属性。

Java 方式

向右平移自身宽度的距离。

import android.animation.ObjectAnimator;

ObjectAnimator animatorTranX = ObjectAnimator.ofFloat(imageView, "translationX", 0 , imageView.getWidth());
animatorTranX.setDuration(3000);
animatorTranX.start();

向下平移自身高度的距离。

ObjectAnimator animatorTranY = ObjectAnimator.ofFloat(imageView, "translationY", 0 , imageView.getHeight());
animatorTranY.setDuration(3000);
animatorTranY.start();

多个动画同时播放,就用AnimatorSet.playTogether(Animator... items)

ObjectAnimator animatorTranX = ObjectAnimator.ofFloat(imageView, "translationX", 0 , imageView.getWidth());
ObjectAnimator animatorTranY = ObjectAnimator.ofFloat(imageView, "translationY", 0 , imageView.getHeight());
AnimatorSet setTranslate = new AnimatorSet();
setTranslate.playTogether(animatorTranX, animatorTranY);
setTranslate.setDuration(3000);
setTranslate.start();

同时播放的效果:
在这里插入图片描述

多个动画先后播放,就用 play(Animator anim)after(Animator anim)before(Animator anim)
如,先播放向右平移动画再播放向下平移动画。

ObjectAnimator animatorTranX = ObjectAnimator.ofFloat(imageView, "translationX", 0 , imageView.getWidth());
ObjectAnimator animatorTranY = ObjectAnimator.ofFloat(imageView, "translationY", 0 , imageView.getHeight());
AnimatorSet setTranslate = new AnimatorSet();
setTranslate.play(animatorTranY).after(animatorTranX);
setTranslate.setDuration(3000);
setTranslate.start();

先后播放的效果:
在这里插入图片描述

xml 方式

也可以使用 xml 的方式。

创建 res/animator 目录,
在这里插入图片描述

创建 res/animator/object_animator_set_translate.xml 文件(名字可以自己取)
在这里插入图片描述
Root element 可选 set 、objectAnimator 。set 是复合动画, objectAnimator 是单个动画。建议 set ,毕竟 set 里可以只放一个动画。
在这里插入图片描述

在 res/animator/object_animator_set_translate.xml 写入,

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" android:ordering="together">
    <objectAnimator
        android:propertyName="translationX"
        android:valueTo="400dp">
    </objectAnimator>

    <objectAnimator
        android:propertyName="translationY"
        android:valueTo="200dp">
    </objectAnimator>
</set>

400dp 、200dp 分别是 imageView 的宽高。

Java 代码中通过 AnimatorInflater.loadAnimator(Context context, @AnimatorRes int id) 使用,

AnimatorSet.setTarget(Object target) 指定要进行属性动画的 Object 。

import android.animation.AnimatorInflater;
import android.animation.AnimatorSet;

AnimatorSet setTranXml = (AnimatorSet) AnimatorInflater.loadAnimator(ObjectAnimActivity.this, R.animator.object_animator_set_translate);
setTranXml.setTarget(imageView);
setTranXml.setDuration(3000);
setTranXml.start();

这样就有效果了。

缩放、旋转、透明也类似,只是传的参数值不同。

缩放

改变对象的 scaleX、scaleY属性。

Java 方式

默认以中心点缩放

ObjectAnimator animatorScaleX = ObjectAnimator.ofFloat(imageView, "scaleX", 1f , 0.5f);
ObjectAnimator animatorScaleY = ObjectAnimator.ofFloat(imageView, "scaleY", 1f , 0.5f);

AnimatorSet setScale = new AnimatorSet();
setScale.playTogether(animatorScaleX,animatorScaleY);
setScale.setDuration(3000);
setScale.start();

效果:
在这里插入图片描述

通过 setPivotXsetPivotY 来设置中心点,以右下角为中心点缩放,

ObjectAnimator animatorScaleX = ObjectAnimator.ofFloat(imageView, "scaleX", 1f , 0.5f);
ObjectAnimator animatorScaleY = ObjectAnimator.ofFloat(imageView, "scaleY", 1f , 0.5f);
imageView.setPivotX(imageView.getWidth());
imageView.setPivotY(imageView.getHeight());

AnimatorSet setScale = new AnimatorSet();
setScale.playTogether(animatorScaleX,animatorScaleY);
setScale.setDuration(3000);
setScale.start();

效果:
在这里插入图片描述

xml 方式

创建 res/animator/object_animator_set_scale.xml 文件,

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" android:ordering="together">
    <objectAnimator android:propertyName="scaleX" android:valueFrom="1"  android:valueTo="0.5" android:duration="3000"/>
    <objectAnimator android:propertyName="scaleY" android:valueFrom="1" android:valueTo="0.5" android:duration="3000"/>
</set>

Java 调用,

AnimatorSet setScaleXml = (AnimatorSet) AnimatorInflater.loadAnimator(ObjectAnimActivity.this, R.animator.object_animator_set_scale);
setScaleXml.setTarget(imageView);
setScaleXml.start();

旋转

改变对象的 rotation 属性。

Java 方式

默认以中心点旋转,

ObjectAnimator animatorRotate = ObjectAnimator.ofFloat(imageView, "rotation",0, 180);
animatorRotate.setDuration(2000);
animatorRotate.start();

效果:
在这里插入图片描述

通过 setPivotXsetPivotY 来设置中心点,以右下角为中心点旋转,

ObjectAnimator animatorRotate = ObjectAnimator.ofFloat(imageView, "rotation",0, 180);
imageView.setPivotX(imageView.getWidth());imageView.setPivotY(imageView.getHeight());
animatorRotate.setDuration(2000);
animatorRotate.start();

效果:
在这里插入图片描述

xml 方式

创建 res/animator/object_animator_rotate.xml 文件,

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:propertyName="rotation"
    android:valueFrom="0"
    android:valueTo="180">
</objectAnimator>

Java 调用,

ObjectAnimator animatorRotateXml = (ObjectAnimator) AnimatorInflater.loadAnimator(ObjectAnimActivity.this, R.animator.object_animator_rotate);
animatorRotateXml.setTarget(imageView);
animatorRotateXml.start();

透明度

改变对象的 alpha 属性。

Java 方式

把透明度改为半透明。

ObjectAnimator animatorAlpha = ObjectAnimator.ofFloat(imageView, "alpha",1.0f, 0.5f);
animatorAlpha.setDuration(2000);
animatorAlpha.start()

效果:
在这里插入图片描述

xml 方式

创建 res/animator/object_animator_alpha.xml 文件,

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:propertyName="alpha"
    android:valueFrom="1"
    android:valueTo="0.5">
</objectAnimator>

Java 调用,

ObjectAnimator animatorAlphaXml = (ObjectAnimator) AnimatorInflater.loadAnimator(ObjectAnimActivity.this, R.animator.object_animator_alpha);
animatorAlphaXml.setTarget(imageView);
animatorAlphaXml.start();

对点击事件的影响

属性动画对点击事件有影响。

即对象的大小、位置变化后,点击对象的原始位置,点击事件没了。

点击对象属性动画结束的位置,点击事件可以响应

示例,点击图片时弹个 Toast ,
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/944389.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信开发之一键创建标签的技术实现

简要描述&#xff1a; 添加标签 请求URL&#xff1a; http://域名地址/addContactLabel 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必选类型说明…

高校实验室预约平台

高校实验室预约平台 我们​正在定制开发的软件&#xff0c;资源都在完成数字化管理&#xff0c;然后向社会开放… 每个行业走在向数字化深化&#xff0c;昨天看到一个数字&#xff0c;美国企业SAAS软件的渗透率为75%&#xff0c;中国企业还只有15%&#xff0c;中国企业数字化还…

同创永益入选首批“金融数字韧性与混沌工程实践试点机构”

8月16日下午&#xff0c;由北京国家金融科技认证中心、北京国家金融标准化研究院联合主办的“传递信任 服务发展”金融科技标准认证生态大会在太原成功举办。中国金融电子化集团有限公司党委书记、董事长周逢民&#xff0c;中国科学院院士冯登国&#xff0c;中国工商银行首席技…

如何制作党建专题汇报片

通过展示党组织的凝聚力和战斗力&#xff0c;增强党员的组织归属感和团结合作意识。通过宣传片&#xff0c;可以加强党组织的凝聚力&#xff0c;推动党的事业发展。制作党建专题汇报片需要一定的前期准备和后期制作技巧。下面是由深圳党建专题汇报片制作公司老友记小编为您整理…

kubesphere安装Maven+JDK17 流水线打包

kubesphere 3.4.0版本&#xff0c;默认支持的jav版本是8和11&#xff0c;不支持17 。需要我们自己定义JenKins Agent 。方法如下&#xff1a; 一、构建镜像 1、我们需要从Jenkins Agent的github仓库拉取master最新源码&#xff0c;最新源码里已经支持jdk17了。 git clone ht…

Spring 如何解决循环依赖问题 - 三级缓存

1. 什么是循环依赖问题 ? 循环依赖问题是指对象与对象之间存在相互依赖关系&#xff0c;而且形成了一个闭环&#xff0c;导致两个或多个对象都无法准确的完成对象的创建和初始化。 两个对象间的循环依赖&#xff1a; 多个对象间的循环依赖 &#xff1a; 解决 Spring 中的循环…

MobaXtermV10.7安装步骤

目录 1&#xff0c;打开​编辑 2&#xff0c;填写自己的虚拟机IP和用户名&#xff0c;点机OK 3,设置 MobaXterm是一款增强型远程连接工具&#xff0c;主要用于Windows的增强终端&#xff0c;带有X11服务器、选项卡式SSH客户端、网络工具等。在一个Windows应用程序中&#xff…

acunetix2023安装教程

1、解压之后一键安装exe文件 2、将解压出来的Awv2023.6[Windows]文件夹下的wvsc.exe文件放置于AWVS安装目录&#xff0c;与原文件进行替换&#xff0c;如图所示。&#xff08;注&#xff1a;如果是默认安装&#xff0c;则文件位置位于C:\Program Files (x86)\Acunetix\14.2.210…

C语言“牵手”京东商品详情数据方法,京东商品详情API接口,京东API申请指南

京东是中国最大的自营式电商企业&#xff0c;在线销售计算机、手机及其它数码产品、家电、汽车配件、服装与鞋类、奢侈品、家居与家庭用品、化妆品与其它个人护理用品、食品与营养品、书籍与其它媒体产品、母婴用品与玩具、体育与健身器材以及虚拟商品等。 京东平台的商品详情…

12.6V三节锂电池升压充电管理IC

HU5810C是5V输入升压充电12.6V1.2A给三节锂电池充电芯片 输入小电流不会拉死&#xff0c;温度60建议1000-1100MA带NTC热敏温度电流保护。HU5810C是一款5V输入,1.2A充电电流,支持三节锂电池串联应用 ,锂离子电池的升压充电管理IC。HU4059C集成功率MOS&#xff0c;采用异步开关架…

pycharm Failed to connect to github.com port 443: Timed out

使用浏览器发现必需打开代理才能访问github, 故有可能是pycharm没有设置代理. 在设置中选择自动代理模式.

【LeetCode】205. 同构字符串 - 数组

这里写自定义目录标题 2023-8-29 16:32:00 205. 同构字符串 2023-8-29 16:32:00 详细通俗的思路分析&#xff0c;多解法 重新了一遍解法二&#xff0c;下次再写这个题目&#xff0c;我要试一试用HashMap class Solution {public boolean isIsomorphic(String s, String t)…

视频监控/视频汇聚/视频云存储EasyCVR平台HLS流集成在小程序无法播放问题排查

安防视频/视频云存储/视频集中存储EasyCVR视频监控综合管理平台可以根据不同的场景需求&#xff0c;让平台在内网、专网、VPN、广域网、互联网等各种环境下进行音视频的采集、接入与多端分发。在视频能力上&#xff0c;视频云存储平台EasyCVR可实现视频实时直播、云端录像、视频…

Mac系统Anaconda环境配置Python的json库

本文介绍在Mac电脑的Anaconda环境中&#xff0c;配置Python语言中&#xff0c;用以编码、解码、处理JSON数据的json库的方法&#xff1b;在Windows电脑中配置json库的方法也是类似的&#xff0c;大家可以一并参考。 JSON&#xff08;JavaScript Object Notation&#xff09;是一…

四川玖璨电子商务有限公司:抖店运营攻略

抖店运营&#xff0c;是指在抖音平台上进行电商销售的一种新型商业模式。随着抖音平台越来越受到年轻人的喜爱和关注&#xff0c;抖店运营正变得越来越重要。那么&#xff0c;抖店运营应该如何做呢&#xff1f;我们来谈谈抖店运营的一些攻略。 第一&#xff0c;选对产品。选择…

论文阅读_扩散模型_SDXL

英文名称: SDXL: Improving Latent Diffusion Models for High-Resolution Image Synthesis 中文名称: SDXL&#xff1a;改进潜在扩散模型的高分辨率图像合成 论文地址: http://arxiv.org/abs/2307.01952 代码: https://github.com/Stability-AI/generative-models 时间: 2023-…

无门槛访问ChatGPT升级版-数据指北AI

大家好&#xff0c;我是脚丫先生 (o^^o) 给小伙伴们介绍ChatGPT升级版不需要任何门槛&#xff0c;不需要单独搞账号&#xff0c;只要邮箱登录的方式&#xff0c;即可访问平台&#xff0c;以用户体验为首要&#xff0c;让所有人都能无门槛的使用目前市面上最强大的AI智能聊天&a…

vue3+antdesign table实现表格行颜色

实现效果&#xff1a; 代码&#xff1a; html: <a-table:columns"stockColumns":data-source"stockData"class"ant-table-striped":rowClassName"rowClassName"></table> js: const rowClassName computed(() > {re…

打工人日常带饭的「不敷衍攻略」,贼实用

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 卷圈 运营 / SandLiu 卷圈 监制 / 姝琦 文案 / 粒粒 产品统筹 / bobo 场地支持 / 声湃轩北京录音间 不知你怎么想&#xff0c;反正就我们的观察来看&#xff0c;带饭上班&#xff0c;绝对处于办公室午餐鄙视链的顶端。…

通达信50日均线上的股票数占比指标公式,衡量大盘强弱

在《以交易为生》书中&#xff0c;作者埃尔德介绍了50日均线上的股票数占比指标&#xff0c;用来衡量大盘的强弱以及捕捉市场转机。50日均线上的股票数占比指标公式计算方法很简单&#xff0c;用高于其50日均线的股票数量除以股票总数。假设沪深A股总数有5000只&#xff0c;有2…