当前位置: 首页 > 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

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

http://www.lryc.cn/news/116035.html

相关文章:

  • Win10无法投影关闭3D模式
  • FFmpeg 编码详细流程
  • 05如何做微服务架构设计
  • 安卓开发问题记录:需要常量表达式
  • 回归预测 | MATLAB实现基于SVM-RFE-BP支持向量机递归特征消除特征选择算法结合BP神经网络的多输入单输出回归预测
  • 配置root账户ssh免密登录并使用docker-machine构建docker服务
  • 【力扣周赛】第357场周赛
  • 多线程案例(4)-线程池
  • 【数据结构OJ题】轮转数组
  • 现代C++中的从头开始深度学习:【4/8】梯度下降
  • Yolov5缺陷检测/目标检测 Jetson nx部署Triton server
  • MobaXterm 中文乱码, 及pojie
  • java: 程序包sun.misc不存在
  • WSL2Linux 子系统(五)
  • java 企业工程管理系统软件源码 自主研发 工程行业适用 em
  • IPO观察丨困于门店扩张的KK集团,还能讲好增长故事吗?
  • 【iOS】RunLoop
  • 数据包传输方式:单播、多播、广播、组播、泛播
  • WebRTC基础知识
  • 积累常见的有针对性的python面试题---python面试题001
  • 在springboot使用websocket时mapper无法注入
  • 前端加密与解密的几种方式
  • 详解Spring Bean的生命周期
  • 详解Shell 脚本中 “$” 符号的多种用法
  • Redis如何实现Session存储
  • 安防视频监控汇聚EasyCVR平台接入Ehome告警,公网快照不显示的原因排查
  • 【Springboot】@ComponentScan 详解
  • flask-----信号
  • 10_Vue3 其它的组合式API(Composition API)
  • COCOS项目运行的时候图片模糊的原因