当前位置: 首页 > news >正文

Android数字价格变化的动画效果的简单实现

原理:使用ValueAnimator属性动画类实现,它通过值的改变手动设置对象的属性值来实现动画效果。直接贴代码:

public static void doNumberAnim(TextView tvPrice, float startNumber, float endNumber) {ValueAnimator animator = ValueAnimator.ofFloat(startNumber, endNumber);animator.setDuration(800);animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {tvPrice.setText(animation.getAnimatedValue().toString());}});animator.start();
}

对于官网解释如下:

This class provides a simple timing engine for running animations which calculate animated values and set them on target objects.

There is a single timing pulse that all animations use. It runs in a custom handler to ensure that property changes happen on the UI thread.

By default, ValueAnimator uses non-linear time interpolation, via the AccelerateDecelerateInterpolator class, which accelerates into and decelerates out of an animation. This behavior can be changed by calling setInterpolator.

Animators can be created from either code or resource files. Here is an example of a ValueAnimator resource file:

ValueAnimator also supports the use of a combination of PropertyValuesHolder and Keyframe resource tags to create a multi-step animation. Note that you can specify explicit fractional values (from 0 to 1) for each keyframe to determine when, in the overall duration, the animation should arrive at that value. Alternatively, you can leave the fractions off and the keyframes will be equally distributed within the total duration:


此类提供了一个简单的计时引擎,用于运行动画,这些动画计算动画值并将其设置在目标对象上。

所有动画都使用单个定时脉冲。它在自定义处理程序中运行,以确保属性更改发生在 UI 线程上。

默认情况下,ValueAnimator 通过类使用非线性时间插值,该插值加速到动画中,从动画中减速。可以通过调用 来更改此行为。AccelerateDecelerateInterpolatorsetInterpolator

可以从代码或资源文件创建动画器。下面是 ValueAnimator 资源文件的示例:

ValueAnimator 还支持使用 and 资源标记的组合来创建多步骤动画。请注意,您可以为每个关键帧指定显式小数值(从 0 到 1),以确定动画在整个持续时间内何时应达到该值。或者,您可以关闭分数,关键帧将在总持续时间内均匀分布:PropertyValuesHolderKeyframe

总结

常数

static final int
INFINITE = -1

此值与属性一起使用以无限期地重复动画。setRepeatCount

static final int
RESTART = 1

当动画到达末尾并且为 INFINITE 或正值时,动画将从开头重新启动。repeatCount

static final int
REVERSE = 2

当动画到达末尾并且为无限值或正值时,动画在每次迭代时都会反转方向。repeatCount

公共构造函数

ValueAnimator()

创建一个新的 ValueAnimator 对象。

公共方法

static boolean
areAnimatorsEnabled()

返回系统范围的动画器当前是否已启用。

void
cancel()

取消动画。

@NonNull ValueAnimator
clone()
void
end()

结束动画。

float
getAnimatedFraction()

返回当前动画分数,这是动画上最近帧更新中使用的经过/插值分数。

@NonNull Object
getAnimatedValue()

当只有一个属性被动画化时,由此计算的最新值。ValueAnimator

@Nullable Object
getAnimatedValue(@NonNull String propertyName)

由此计算的最新值为 。ValueAnimatorpropertyName

long
getCurrentPlayTime()

获取动画在时间中的当前位置,该位置等于当前时间减去动画开始的时间。

long
getDuration()

获取动画的长度。

static long
getFrameDelay()

动画的每一帧之间的时间量(以毫秒为单位)。

@Nullable Interpolator
getInterpolator()

返回此值动画器使用的计时插值器。

@NonNull String
getNameForTrace()

返回此动画器的名称以进行调试。

int
getRepeatCount()

定义动画应重复的次数。

int
@ValueAnimator.RepeatMode
getRepeatMode()

定义此动画到达末尾时应执行的操作。

long
getStartDelay()

调用延迟启动动画的时间量(以毫秒为单位)。start

long
getTotalDuration()

获取动画的总持续时间,包括动画序列、开始延迟和重复。

@NonNull PropertyValuesHolder[]
getValues()

返回此值动画器在其间进行动画处理的值。

boolean
isRunning()

返回此动画器当前是否正在运行(已启动并已超过任何初始启动延迟周期且尚未结束)。

boolean
isStarted()

返回此动画器是否已启动和尚未结束。

static @NonNull ValueAnimator
ofArgb(@NonNull int[] values)

构造并返回一个在颜色值之间进行动画处理的 ValueAnimator。

static @NonNull ValueAnimator
ofFloat(@NonNull float[] values)

构造并返回一个在浮点值之间进行动画处理的 ValueAnimator。

static @NonNull ValueAnimator
ofInt(@NonNull int[] values)

构造并返回一个在 int 值之间进行动画处理的 ValueAnimator。

static @NonNull ValueAnimator
ofObject(@NonNull TypeEvaluator evaluator, @NonNull Object[] values)

构造并返回一个在对象值之间进行动画处理的 ValueAnimator。

static @NonNull ValueAnimator
ofPropertyValuesHolder(@NonNull PropertyValuesHolder[] values)

构造并返回一个 ValueAnimator,该动画器在 PropertyValuesHolder 对象中指定的值之间进行动画处理。

void
pause()

暂停正在运行的动画。

void
resume()

恢复暂停的动画,使动画师在暂停时从中断的位置继续。

void
reverse()

反向播放 ValueAnimator。

void
setCurrentFraction(float fraction)

将动画的位置设置为指定的分数。

void
setCurrentPlayTime(long playTime)

将动画的位置设置为指定的时间点。

@NonNull ValueAnimator
setDuration(long duration)

设置动画的长度。

void
setEvaluator(@NonNull TypeEvaluator value)

计算此动画的动画值时要使用的类型赋值器。

void
setFloatValues(@NonNull float[] values)

设置将在浮点值之间进行动画处理。

static void
setFrameDelay(long frameDelay)

动画的每一帧之间的时间量(以毫秒为单位)。

void
setIntValues(@NonNull int[] values)

设置将在两者之间进行动画处理的 int 值。

void
setInterpolator(@Nullable Interpolator value)

用于计算此动画的经过分数的插值器。

void
setNameForTrace(@NonNull String animationName)

设置要在系统跟踪中显示的动画的名称。

void
setObjectValues(@NonNull Object[] values)

设置要对此动画进行动画处理的值。

void
setRepeatCount(int value)

设置动画应重复的次数。

void
setRepeatMode(@ValueAnimator.RepeatMode int value)

定义此动画到达末尾时应执行的操作。

void
setStartDelay(long startDelay)

调用延迟启动动画的时间量(以毫秒为单位)。start

void
setValues(@NonNull PropertyValuesHolder[] values)

设置每个属性之间的值。

void
start()

启动此动画。

@NonNull String
toString()

继承的常量

来自androidx.core.animation.Animator

继承的方法

来自androidx.core.animation.Animator

公共方法

getAnimatedValue

public @Nullable Object getAnimatedValue(@NonNull String propertyName)

由此计算的最新值为 。此只读属性的主要用途是在计算值后立即从调用 期间检索值,该值在每个动画帧期间调用。ValueAnimatorpropertyNameValueAnimatoronAnimationUpdate

返回
@Nullable Object

animatedValue 最近由 .ValueAnimator

getDuration

获取动画的长度。默认持续时间为 300 毫秒。

返回
long

动画的长度(以毫秒为单位)。

对象

public static @NonNull ValueAnimator ofObject(@NonNull TypeEvaluator evaluator, @NonNull Object[] values)

构造并返回一个在对象值之间进行动画处理的 ValueAnimator。单个值意味着该值是要动画到的值。但是,这在 ValueAnimator 对象中通常没有用处,因为对象无法确定动画的起始值(与 ObjectAnimator 不同,ObjectAnimator 可以从要设置动画的目标对象和属性派生该值)。因此,通常应有两个或多个值。

注意:Object 值存储为对原始对象的引用,这意味着调用此方法后对这些对象的更改将影响动画器上的值。如果在调用此方法后对象将在外部发生突变,则调用方应改为传递这些对象的副本。

由于 ValueAnimator 不知道如何在任意对象之间进行动画处理,因此此工厂方法还采用 TypeEvaluator 对象,ValueAnimator 将使用该对象来执行该插值。

参数
@NonNull TypeEvaluator evaluator

将在每个动画帧上调用的类型计算器,以在对象值之间提供必要的插值以派生动画值。

@NonNull Object[] values

动画将随时间推移在其之间设置动画效果的一组值。

返回
@NonNull ValueAnimator

一个 ValueAnimator 对象,该对象设置为在给定值之间进行动画处理。

设置电流分数

public void setCurrentFraction(float fraction)

将动画的位置设置为指定的分数。此分数应介于 0 和动画的总分数之间,包括任何重复。也就是说,分数 0 会将动画定位在重复一次的反转动画器的开头,值 1 定位在末尾,值 2 定位在末尾。如果动画尚未启动,则在设置为此分数后,它将不会向前前进;它只需将分数设置为此值,并根据该分数执行任何适当的操作。如果动画已经在运行,则 setCurrentFraction() 会将当前分数设置为此值,并从该点继续播放。 由于更改分数,不会调用事件;这些事件仅在动画运行时处理。androidx.core.animation.Animator.AnimatorListener

参数
float fraction

动画前进或倒带到的分数。动画师的最大分数范围之外的值将被钳制到正确的范围。

setEvaluator

public void setEvaluator(@NonNull TypeEvaluator value)

计算此动画的动画值时要使用的类型赋值器。系统将根据构造函数中的类型和自动分配浮点数或整数赋值器。但是,如果这些值不是这些基元类型之一,或者需要不同的计算(例如表示颜色的 int 值所必需的),则需要分配自定义计算器。例如,在对颜色值运行动画时,应使用 来获取正确的 RGB 颜色插值。startValueendValueArgbEvaluator

如果此值动画器之间只有一组值进行动画处理,则此赋值器将用于该集。如果有几组值正在进行动画处理,例如在 ValueAnimator 上设置了 PropertyValuesHolder 对象,则赋值器仅分配给第一个 PropertyValuesHolder 对象。

参数
@NonNull TypeEvaluator value

此动画要使用的赋值器

设置对象值

public void setObjectValues(@NonNull Object[] values)

设置要对此动画进行动画处理的值。单个值意味着该值是要动画到的值。但是,这在 ValueAnimator 对象中通常没有用处,因为对象无法确定动画的起始值(与 ObjectAnimator 不同,ObjectAnimator 可以从要设置动画的目标对象和属性派生该值)。因此,通常应有两个或多个值。

注意:Object 值存储为对原始对象的引用,这意味着调用此方法后对这些对象的更改将影响动画器上的值。如果在调用此方法后对象将在外部发生突变,则调用方应改为传递这些对象的副本。

如果已经通过多个 PropertyValuesHolder 对象为此 ValueAnimator 定义了多组值,则此方法将为其中第一个对象设置值。

在 ValueAnimator 上应该设置一个 TypeEvaluator,它知道如何在这些值对象之间进行插值。ValueAnimator 只知道如何在其他 setValues() 方法中指定的基元类型之间进行插值。

参数
@NonNull Object[] values

要在其间进行动画处理的值集。

相关文章:

Android数字价格变化的动画效果的简单实现

原理:使用ValueAnimator属性动画类实现,它通过值的改变手动设置对象的属性值来实现动画效果。直接贴代码: public static void doNumberAnim(TextView tvPrice, float startNumber, float endNumber) {ValueAnimator animator ValueAnimato…...

Win10无法投影关闭3D模式

Win10不小心开启了3D模式,插上投影仪就一闪一闪的,无法正投影 解决办法: 1. 打开注册表工具regedit,删除以下注册表,重启电脑 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Configurat…...

FFmpeg 编码详细流程

介绍 FFmpeg的 libavcodec 模块完成音视频多媒体的编解码模块。FFmpeg 本身不具有音视频编码的功能和底层能力,只是对各类第三方的编码器API 进行封装调用。老版本的 FFmpeg 将avcodec_encode_video2()作为视频的解码函数 API,将avcodec_encode_audio2(…...

05如何做微服务架构设计

一句话导读 微服务架构设计方法有:领域驱动设计DDD(Domain-Driven-Design)、12因素应用(12-Factor App)、事件驱动架构EDA(Event-Driven Architecture)等等,但是他们都必须遵守微服务…...

安卓开发问题记录:需要常量表达式

问题原因 写代码过程中爆出这个错误:需要常量表达式,定位到switch。 解决方法:把switch case,改成if else 错误源代码: public void onClick(View view) {switch (view.getId()) {case R.id.iv_code:RxCaptcha.build(…...

回归预测 | MATLAB实现基于SVM-RFE-BP支持向量机递归特征消除特征选择算法结合BP神经网络的多输入单输出回归预测

回归预测 | MATLAB实现基于SVM-RFE-BP支持向量机递归特征消除特征选择算法结合BP神经网络的多输入单输出回归预测 目录 回归预测 | MATLAB实现基于SVM-RFE-BP支持向量机递归特征消除特征选择算法结合BP神经网络的多输入单输出回归预测预测效果基本介绍研究内容程序设计参考资料…...

配置root账户ssh免密登录并使用docker-machine构建docker服务

简介 Docker Machine是一种可以在多种平台上快速安装和维护docker运行环境,并支持多种平台,让用户可以在很短时间内在本地或云环境中搭建一套docker主机集群的工具。 使用docker-machine命令,可以启动、审查、停止、重启托管的docker 也可以…...

【力扣周赛】第357场周赛

【力扣周赛】第357场周赛 2810. 故障键盘题目描述解题思路 2811. 判断是否能拆分数组题目描述解题思路 2810. 故障键盘 题目描述 描述:你的笔记本键盘存在故障,每当你在上面输入字符 ‘i’ 时,它会反转你所写的字符串。而输入其他字符则可以…...

多线程案例(4)-线程池

文章目录 多线程案例四四、线程池 大家好,我是晓星航。今天为大家带来的是 多线程案例-线程池 相关的讲解!😀 多线程案例四 四、线程池 线程池是什么 虽然创建线程 / 销毁线程 的开销 想象这么一个场景: 在学校附近新开了一家…...

【数据结构OJ题】轮转数组

原题链接:https://leetcode.cn/problems/rotate-array/ 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 1. 方法一:暴力求解,将数组的第一个元素用临时变量tmp存起来,再将数组其他元素往右挪动一步&…...

现代C++中的从头开始深度学习:【4/8】梯度下降

一、说明 在本系列中,我们将学习如何仅使用普通和现代C编写必须知道的深度学习算法,例如卷积、反向传播、激活函数、优化器、深度神经网络等。 在这个故事中,我们将通过引入梯度下降算法来介绍数据中 2D 卷积核的拟合。我们将使用卷积和上一个…...

Yolov5缺陷检测/目标检测 Jetson nx部署Triton server

使用AI目标检测进行缺陷检测时,部署到Jetson上即小巧算力还高,将训练好的模型转为tensorRT再部署到Jetson 上供http或GRPC调用。1 Jetson nx 刷机 找个ubuntu 系统NVIDIA官网下载安装Jetson 的sdkmanager一步步刷机即可。 本文刷的是JetPack 5.1, 其中包…...

MobaXterm 中文乱码, 及pojie

中文解决方法: 把“连字”去掉! MobaXterm网页,可以生成一个授权文件Custom.mxtpro。放在安装目录就可以了 MobaXterm Keygen (husbin.top)http://b70.husbin.top:5000/...

java: 程序包sun.misc不存在

启动失败,rebuild时也报错:java: 程序包sun.misc不存在 问题出在JDK版本上,这个包在JDK9的时候已经被弃用了,这里改回JDK8即可 步骤如下:...

WSL2Linux 子系统(五)

WLS2Linux 子系统编译 Android 上一篇文章中讲解 《WLS2Linux 子系统迁移/恢复》,从C盘迁移到D盘。既可以防止C盘爆红,又可以释放磁盘空间。有更大存储空间意味大有可为,比如说编译Android系统。本文则以开源 firefly Android10代码为例简单…...

java 企业工程管理系统软件源码 自主研发 工程行业适用 em

​ 工程项目管理软件(工程项目管理系统)对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营,全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#…...

IPO观察丨困于门店扩张的KK集团,还能讲好增长故事吗?

KK集团发起了其IPO之路上的第三次冲击。 近日,KK集团更新了招股书,继续推进港交所上市进程,此前两次上市搁置后终于有了新动向。从更新内容来看,KK集团招股书披露了公司截至2023年一季度的最新业绩,交出一份不错的“成…...

【iOS】RunLoop

前言-什么是RunLoop? 什么是RunLoop? 跑圈?字面上理解确实是这样的。 Apple官方文档这样解释RunLoop RunLoop是与线程息息相关的基本结构的一部分。RunLoop是一个调度任务和处理任务的事件循环。RunLoop的目的是为了在有工作的时候让线程忙起来&#…...

数据包传输方式:单播、多播、广播、组播、泛播

数据包传输方式 单播、多播、广播、组播、泛播 网络中假设X代表所有的机器,Y代表X中的一部分机器,Z代表一组机器,1代表一台机器,那么 1:1 那就是单播;1:Y 那就是多播;1&#xff1…...

WebRTC基础知识

文章目录 基础概念NAT (Network Address Translation) 打洞STUN(Session Traversal Utilities for NAT)基于STUN协议的DDoS反射攻击 # TODO TURN(Traversal Using Relays around NAT)ICE(Interactive Connectivity Est…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...