安卓简易实现数字跳动的动画效果,从一个数加或者减到另一个数,不断跳动显示。

跳动的TextView:原理如下:

package com.dpdp.testapplication.text;import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.animation.TypeEvaluator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.animation.LinearInterpolator;
import android.widget.Toast;import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatTextView;import java.math.BigDecimal;/*** Created by ldp.* <p>* Date: 2021-03-15* <p>* Summary: TextView 跳动的动画 数字从 startValue 到 endValue 有一个数字不断跳动的过渡效果* 数字可以使任意类型的数字 可以是int long等等类型 传入时需转换为 String 类型*/
public class NumberDanceTextView extends AppCompatTextView {private final String TAG = NumberDanceTextView.class.getSimpleName();private ValueAnimator animator;public NumberDanceTextView(@NonNull Context context) {super(context);}public NumberDanceTextView(@NonNull Context context, @Nullable AttributeSet attrs) {super(context, attrs);}public NumberDanceTextView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}/*** {@link #setNumberText(String, int)}*/public void setNumberText(String targetNum) {this.setNumberText(targetNum, 3000);}/*** {@link #setNumberText(String, int, boolean, String,int)}*/public void setNumberText(String targetNum, int duration) {this.setNumberText(targetNum, duration, false, "0",2);}/*** TextView 跳动的动画 数字从 startValue 到 endValue** @param targetValue     结果数字* @param duration        动画时间* @param isHaveInitValue 是否设置初始值 如果 否 则取textView 当前的 数字为 初始值* @param startNum        如果有初始值设置初始值* @param scale           保留小数位数*/public void setNumberText(String targetValue, int duration, boolean isHaveInitValue, String startNum,int scale) {if (animator != null && animator.isRunning()) {stopAnimation();}try {// 设置起始值String startValue = isHaveInitValue ? startNum : getText().toString();// 相同则取消更新;if (0 == compare(startValue, targetValue)) return;// 设置估值器DoubleEvaluator doubleEvaluator = new DoubleEvaluator();// 属性动画animator = ObjectAnimator.ofObject(doubleEvaluator, Double.parseDouble(startValue), Double.parseDouble(targetValue));// 差值器 线性变化animator.setInterpolator(new LinearInterpolator());// 持续时间animator.setDuration(duration);// 更新 UIanimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {String value = new BigDecimal(String.valueOf(animation.getAnimatedValue())).setScale(scale, BigDecimal.ROUND_HALF_EVEN).toString();setText(value);}});animator.addListener(new AnimatorListenerAdapter() {@Overridepublic void onAnimationEnd(Animator animation) {String value = new BigDecimal(targetValue).setScale(scale, BigDecimal.ROUND_HALF_EVEN).toString();setText(value);}});animator.start();} catch (NumberFormatException e) {e.printStackTrace();// 类型转换异常Toast.makeText(getContext(), "请输入正确格式的数字", Toast.LENGTH_SHORT).show();} catch (Exception e) {e.printStackTrace();// 异常则直接更新结果setText(String.valueOf(targetValue));}}@Overrideprotected void onAttachedToWindow() {super.onAttachedToWindow();Log.e(TAG, "---------------------onAttachedToWindow-----------------------");}@Overrideprotected void onDetachedFromWindow() {super.onDetachedFromWindow();Log.e(TAG, "---------------------onDetachedFromWindow-----------------------");stopAnimation();}/*** 停止播放动画*/private void stopAnimation() {if (animator != null) {animator.removeAllUpdateListeners();animator.removeAllListeners();animator.cancel();animator = null;}}/*** 自定义 估值器 控制变化的值*/private static class DoubleEvaluator implements TypeEvaluator<Double> {/*** 计算中间估值** @param fraction   动画的进度百分比* @param startValue 起始值* @param endValue   目标值* @return 估值*/@Overridepublic Double evaluate(float fraction, Double startValue, Double endValue) {return ((endValue - startValue) * fraction + startValue);}}/*** 比较两个数的大小** @return {@code 1} if {@code this > val}, {@code -1} if {@code this < val},* {@code 0} if {@code this == val}.* @throws NullPointerException if {@code val == null}.*/private int compare(String a, String b) {return new BigDecimal(a).compareTo(new BigDecimal(b));}
}

源代码以及Demo地址点我

安卓 Textview 简易数字跳动效果相关推荐

  1. Android怎么实现数字增减,Android实现数字跳动效果的TextView方法示例

    前言 本文介绍的是Android如何实现数字跳动效果的TextView,主要运用了DancingNumberView,DancingNumberView是一个用于跳动显示文本中数字的控件,继承自Tex ...

  2. android仿小米运动,GitHub - luciferldy/Bnimation: 模仿即刻 App 点赞与数字跳动效果,模仿小米运动首页转圈圈的烟花效果...

    Bnimation 现阶段实现了模仿即刻点赞效果以及数字跳动增长,小米运动首页烟花转圈圈(•̀⌄•́)效果. 即刻 即刻的点赞效果 下面是我实现的效果(最下为 TextView 自带的展示数字效果) ...

  3. 仿余额宝数字跳动效果 TextCounter

    1.TextCounter 效果     2.TextCounter 说明 每次打开余额宝第一件事情就去看看有多少钱,最炫的就是看着钱在跳动相当的舒服,今天放出这个效果. 温馨提示:支持的Androi ...

  4. android金币动效_Android 仿余额宝数字跳动动画效果完整代码

    一:想都不用想的,有图有真相,看着爽了,在看下面源码 二:实例源码分析 ①:首先定义接口 package com.demo.tools.view; /** * 数字动画自定义 * * @author ...

  5. android跳一跳功能实现,Android 数字跳动显示的TextView实现

    简介 DancingNumberView是一个用于跳动显示文本中数字的控件,继承自TextView.这种控件一般用于显示金额等对用户较为敏感的数字,让UI交互更加生动. 它具有以下几点特性: 自动获取 ...

  6. android 文字跳动动画,Android 仿余额宝数字跳动动画效果完整代码

    Android 仿余额宝数字跳动动画效果完整代码 发布时间:2020-08-24 06:55:30 来源:脚本之家 阅读:120 作者:曾淘 一:想都不用想的,有图有真相,看着爽了,在看下面源码 二: ...

  7. jquery+css动画效果-数字跳动

    效果演示: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF- ...

  8. TextView的跑马灯效果(AS开发实战第二章学习笔记)

    TextView的跑马灯效果 跑马灯用到的属性与方法说明 singleLine 指定文本是否单行显示 ellipsize 指定文本超出范围后的省略方式 focusable 指定是否获得焦点,跑马灯效果 ...

  9. 基于PaddlePaddle框架对CIFAR-100数据集在简易CNN(LeNet-5修改)和简易DNN的效果对比

    CIFAR-100数据集在简易CNN(LeNet-5修改)和简易DNN的效果对比 项目说明 该项目为课程作业,实验过程等没有非常严谨,如有问题请指正,会及时改正! 摘要 本文对相同数据集使用简易线性神 ...

最新文章

  1. (转)同一服务器部署多个tomcat时的端口号修改详情
  2. eclipse 导入hadoop2.2源代码
  3. 数组元素数组中的元素通过解析字符串参数获得
  4. MySQL8.0 · 优化器新特性 · Cost Model, 直方图及优化器开销优化
  5. 西南科技大学计算机综合大纲,2019年西南科技大学信息工程学院考研复试大纲...
  6. system health_Health Hack 2014:开源,开放数据和跨学科协作的力量
  7. CSS控制div宽度最大宽度/高度和最小宽度/高度
  8. js中应用protocol buffer
  9. ccna考试之导入题库———pdf转vce格式转换
  10. 奈奎斯特与香农定理_奈奎斯特定律和香农定理
  11. 计算机主板外部接口功能,笔记本电脑主板接口功能分享
  12. 计算机word降序排列怎么做,WORD表格怎么按照数字降序排列
  13. 排列组合之插板法实例
  14. linux如何查看读写权限,Linux系统下如何查看及修改文件读写权限
  15. 吃瓜 || 一文看懂BCH分叉事件始末
  16. rescale matlab,frft_matlab integrated algorithm about Frft, matla - CodeBus
  17. 学了python能找人吗_只学python能找工作吗
  18. PS 滤镜——(扭曲)球面化 Spherize
  19. 悉尼大学理学院计算机科学,澳洲悉尼大学理学院中国留学生
  20. BPM流程建模开发详解

热门文章

  1. 2017 山东理工第九届校赛 C 康纳的表情包
  2. Unity使用Universal RP将3D项目升级为URP
  3. python 安装matplotlib error:could not find a version that satisfies the requirement xxx
  4. GBK与GB2312 解决GBK转UTF-8部分字符乱码
  5. 8QAM信号调制解调 代码
  6. [洛谷P4172] WC2006 水管局长
  7. 3.初识freeswitch
  8. 玩诈欺的小杉【推荐】
  9. finalshell 忘记密码怎么办?
  10. 电解电容在电子电路中设计使用时要注意什么?