Android实现数字跳动效果的TextView方法示例
作者:Android技术之家 发布时间:2023-05-24 16:54:29
标签:android,textview,数字跳动
前言
本文介绍的是Android如何实现数字跳动效果的TextView,主要运用了DancingNumberView,DancingNumberView是一个用于跳动显示文本中数字的控件,继承自TextView,这种控件一般用于显示金额等对用户较为敏感的数字,让UI交互更加生动。
它具有以下几点特性:
自动获取文本中的所有数字,并同时开始跳动,免去多个TextView拼接的麻烦
支持数字按照自定义的格式显示,例如限定只显示小数点后两位
效果图如下
导入使用
Gradle
第1步,在project的build.gradle文件中适当位置添加
allprojects {
repositories {
...
maven { url "https://jitpack.io" }
}
}
第2步,在app的build.gradle文件中适当位置添加依赖项
dependencies {
compile 'com.github.JianxunRao:DancingNumberView:V1.0.1'
}
使用方式
通过XML布局
<me.trojx.dancingnumber.DancingNumberView
android:id="@+id/dnv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:dnv_duration="6000"
app:dnv_format="%.2f"/>
通过Java代码
DancingNumberView dnv = (DancingNumberView) findViewById(R.id.dnv);
dnv.setText(text);//设置显示内容
dnv.setDuration(duration);//设置完成跳动的持续时长(单位ms)
dnv.setFormat(format);//设置数字的显示格式
dnv.dance();//启动效果,开始数字跳动
关键代码
/**
* 文本中的数字开始跳动
*/
public void dance() {
text = getText().toString();
numbers=new ArrayList<>();
Pattern pattern = Pattern.compile("\\d+(\\.\\d+)?");
Matcher matcher=pattern.matcher(text);
while (matcher.find()){
numbers.add(Float.parseFloat(matcher.group()));
}
textPattern = text.replaceAll("\\d+(\\.\\d+)?",PLACEHOLDER);
numberTemp=new float[numbers.size()];
ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(this,"factor",0,1);
objectAnimator.setDuration(duration);
objectAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
objectAnimator.start();
}
/**
* 获取算数因子
* @return 算数因子
*/
public float getFactor() {
return factor;
}
/**
* 设置算数因子,为ObjectAnimator调用
* @see ObjectAnimator
* @param factor 算数因子
*/
public void setFactor(float factor) {
String textNow=textPattern;
this.factor = factor;
for (int i=0;i<numberTemp.length;i++){
numberTemp[i]=numbers.get(i)*factor;
textNow=textNow.replaceFirst(PLACEHOLDER,String.format(format,numberTemp[i]));
}
setText(textNow);
}
来源:http://mp.weixin.qq.com/s/OWVuFyOJsC2rlR8cBfPkdQ


猜你喜欢
- 方式一: 配置文件 application.propertiesserver.port=7788方式二: java启动命令# 以应用参数的方
- 1.需要的Maven依赖// 支付宝<dependency> <groupId>com.alipay.
- Android MediaPlayer实现音乐播放器1、布局文件<?xml version="1.0" encod
- 最近在项目中有这么个需求,就是得去实时获取某个在无规律改变的文本文件中的内容。首先想到的是用程序定期去访问这个文件,因为对实时性要求很高,间
- Android—MaterialCardView的使用我们的征程是星辰大海,而非人间烟尘文章目录 Android---MaterialCar
- 本文实例展示了WinForm实现为ComboBox绑定数据源并提供下拉提示功能,这是一个非常有实用价值的功能,具体实现方法如下:主要功能代码
- 前言好记性不如烂笔头,日期时间类那么花哨不如记下来多看两眼。提示:以下是本篇文章正文内容,下面案例可供参考一.日期时间类的包代码如下(示例)
- 一.前言RabbitMQ 是一种快速、灵活、可靠的消息传递方式,可用于构建分布式应用程序、异步处理任务、实现消息队列等。下面是 Java 原
- 使用场景在 Java 应用中,对于访问频率高,更新少的数据,通常的方案是将这类数据加入缓存中。相对从数据库中读取来说,读缓存效率会有很大提升
- 引言:序列化是将对象的状态信息转换为可以存储或传输的形式的过程,在序列化期间,对象将其带你过去的状态写入到临时或持储存区,反序列化就是重新创
- 前言学习了关于集合类的知识,我们可以做一个小项目来加深对集合类知识的学习!一、项目要求代码实现,一副扑克牌(不包括大小王)的购买、打乱、发牌
- 导读Spring Boot应用可以使用spring-boot-maven-plugin快速打包,构建一个可执行jar。Spring Boot
- BeanUtils.copyProperties忽略空值使用spring开发的人,对这行代码肯定不陌生,常用于DTO、VO、PO之间的复制。
- using System;using System.Collections.Generic;using System.Linq;using
- 一、为基本数据类型起别名typedef int myint;myint x = 5;"myint"是"int&
- collect通知flow执行public suspend inline fun <T> Flow<T>.colle
- 背景产品想对多次快速点击做一下优化,想要的效果就是双击不会打开多次但是从开发角度来说,我可以用kotlin的拓展方法来调整这个,但是之前的历
- 今天老师留的作业,使用俩个Fragment来实现3D翻转效果,遇到了一点点的问题,于是在网上进行了查找,但是发现有些博主的代码不正确,对其他
- 之前一段时间,在朋友的推荐下,玩了探探这一款软件,初玩的时候,就发现,这款软件与一般的社交软件如陌陌之类的大相径庭,让我耳目一新,特别是探探
- 现如今的APP各式各样,同样也带来了各种需求,一个下拉刷新都能玩出花样了,前两天订饭的时候不经意间看到了“百度外卖”的下拉刷新,今天的主题就