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); 

} 

总结

以上就是这篇文章的全部内容了,希望本文的内容对各位Android开发者们能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • Android仿淘宝头条基于TextView实现上下滚动通知效果

    最近有个项目需要实现通知栏的上下滚动效果,仿淘宝头条的那种. 我从网上看了一些代码,把完整的效果做了出来.如图所示: 具体代码片段如下: 1.在res文件夹下新建anmin文件夹,在这个文件夹里创建两个文件 (1).anim_marquee_in.xml进入时动画 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/ap

  • Android TextView自定义数字滚动动画

    背景 在开发需求当中,当有总收益.总用户数等数字要显示时,为了更好的给用户提供展示效果,往往会想加入炫酷的数字滚动动画,使呆板平静的数字变得灵活起来,给人一种增值的直观感受. 简介 NumberRollingView是一个自定义的自带数字滚动动画的TextView,通过使用setContent(String str)方法进行数字字符串设置,传入相应的金额数字字符串(如"9686.86")或者整数数字字符串(如"968"),设置的数字必须是正数.当显示页面初始化完成的

  • Android 开发中根据搜索内容实现TextView中的文字部分加粗

    实现方式没有引入任何依赖,轻量级实现需求效果 最近遇到一个需求,需要做一个搜索功能.搜索的内容需要加粗显示. 完成了这个功能后,写下此博客,记录一下实现过程 效果图 首先自定义一个StyleSpan,在StyleSpan里做加粗的等匹配状态的设置 @SuppressLint("ParcelCreator") public class SearchStyleSpan extends StyleSpan { public SearchStyleSpan(int style) { super

  • Android textview 实现长按自由选择复制功能的方法

    这里有一个大坑,我的viewGroup中有一个这个属性android:descendantFocusability="blocksDescendants" 开始没有注意到,试了好多方法都不行,后来才看到这个属性,顺便科普一下,这个属性有三个值~ beforeDescendants:viewgroup会优先其子类控件而获取到焦点 afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点 blocksDescendants:viewgroup会覆盖子类

  • Android自定义竖排TextView实现实例

    Android自定义竖排TextView实现实例 前言: 之前做联系人模块的时候遇到一个左侧索引控件,里面的字符都是竖直方向上排列的.当时这个控件是用一个图片代替的.现在想来如果索引的字符变更了,那么就得重新更换图片了,感觉很麻烦.今天通过一个自定义TextView实现类似的功能.先上效果图: 汉字和英文字符都可以竖直排列.结合联系人界面,可以将左侧的索引改成联系人的姓氏. 上代码: 测试用的Activity. public class MainActivity extends Activity

  • Android 中TextView的使用imageview被压缩问题解决办法

    Android 中TextView的使用imageview被压缩问题解决办法 看下运行效果图: 今天解bug的时候遇到一个奇怪的问题:listview的item由一个textview和一个imageview组成,父布局是线性水平排列.我的本意是imageview显示相同的图片,textview显示文本,但是运行程序后发现,当某个textview的文本较多时,imageview会被压缩,刚开始没注意,检查代码了好久. 代码示例如下: <!--文本少的item--> <LinearLayou

  • Android使用TextView跑马灯效果

    老规矩,先上图看效果. 说明 TextView的跑马灯效果也就是指当你只想让TextView单行显示,可是文本内容却又超过一行时,自动从左往右慢慢滑动显示的效果就叫跑马灯效果. 其实,TextView实现跑马灯效果很简单,因为官方已经实现了,你只需要通过设置几个属性即可.而且,相关的资料其实网上也有一大堆了,之所以还写这篇博客出来是因为,网上好多人的博客都是只贴代码的啊,好一点的就是附带几张图片,可是这是动画效果啊,不动起来,谁知道跑马灯效果到底长什么样,到底是不是自己想要的效果啊(不会只有题主

  • Android中TextView文本高亮和点击行为的封装方法

    前言 相信大家应该都有所体会,对于一个社交性质的App,业务上少不了给一段文本加上@功能.话题功能,或者是评论上要高亮人名的需求.当然,Android为我们提供了ClickableSpan,用于解决TextView部分内容可点击的问题,但却附加了一堆的坑点: ClickableSpan 默认没有高亮行为,也不能添加背景颜色: ClickableSpan 必须配合 MovementMethod 使用 一旦使用 MovementMethod,TextView 必定消耗事件 当点击ClickableS

  • Android实现数字跳动效果的TextView方法示例

    前言 本文介绍的是Android如何实现数字跳动效果的TextView,主要运用了DancingNumberView,DancingNumberView是一个用于跳动显示文本中数字的控件,继承自TextView,这种控件一般用于显示金额等对用户较为敏感的数字,让UI交互更加生动. 它具有以下几点特性: 自动获取文本中的所有数字,并同时开始跳动,免去多个TextView拼接的麻烦 支持数字按照自定义的格式显示,例如限定只显示小数点后两位 效果图如下 导入使用 Gradle 第1步,在project

  • android实现音乐跳动效果的示例代码

    效果图 实现 整体的流程图如下 上面主要步骤分为3个 1.计算宽度能放下多少列的音频块. 2.计算每一列中音频块的个数 3.绘制音频块 1.计算宽度能放下多少列的音频块. 设置音频块的宽度为danceWidth,音频块横向之间的间距为danceGap,那么可以算出能放的列数: /** * 先计算当前宽度能够放下多少个音频块 */ val widthNum = (getAvailableWith() / (danceGap + danceWidth)).toInt() /** * 获取可以用的宽度

  • Cocos2dx实现数字跳动效果

    本文实例为大家分享了Cocos2dx实现数字跳动效果的具体代码,供大家参考,具体内容如下 封装的类如下: .h文件 class DigitalBeatText:public cocos2d::Node { public: DigitalBeatText(); ~DigitalBeatText(); static DigitalBeatText *create(int value); void setValue(int newValue); protected: bool init(int val

  • Android flutter Dio锁的巧妙实现方法示例

    正文 看Dio库源码的时候,发现其拦截器管理的逻辑处用到了一个Lock,这个Lock巧妙地利用了Completer和Future的机制来实现,记录一下. /// Add lock/unlock API for interceptors. class Lock { Future? _lock; late Completer _completer; /// 标识拦截器是否被上锁 bool get locked => _lock != null; /// Lock the interceptor. /

  • Android中验证码倒计时的简单实现方法示例

    前言 现在的很多app都是使用手机注册的,为了确认使用的是自己的手机,都会加上一个短线验证码的选项,最近公司的项目使用到了这个短信验证码,并且要加入验证码倒计时功能,也就是60秒才能发送一次验证码,再次做过记录,以后使用的时候,可以随时拿来用. 实现 发送验证码的时候一般都会有一个按钮,点击之后便会给你输入的手机发送一条验证码,我这里使用的是一个TextView,显示特定的数字,只用设置TextView的点击事件即可: Android中有一个类,可以很方便的时候该功能,但是也会存在一个问题,就是

  • Android开发之计算器GridLayout布局实现方法示例

    本文实例讲述了Android开发之计算器GridLayout布局实现方法.分享给大家供大家参考,具体如下: 运行效果: Demo 下载地址:https://github.com/LonglyWolf/Calculator 或者点击此处本站下载. 按钮布局实现: 一个Linearlayout 嵌套三个TextView 最下方的显示当前计算式.上面为先前的计算式. Gridview 网格布局排布按钮 <?xml version="1.0" encoding="utf-8&q

  • Android编程绘图操作之弧形绘制方法示例

    本文实例讲述了Android编程绘图操作之弧形绘制方法.分享给大家供大家参考,具体如下: /** * 绘制弧形图案 * @description: * @author ldm * @date 2016-4-25 下午4:37:01 */ public class ArcsActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedIns

  • Android 使用PDF.js浏览pdf的方法示例

    Android的WebView做不到ios的WebView那样可以很方便的直接预览pdf文件.要实现利用WebView预览pdf我们可以使用谷歌文档服务: mWebView.loadUrl("http://docs.google.com/gviewembedded=true&url=" + pdfUrl); 这种方式国内网络环境是不用考虑的.当然也有替代的方案:我们可以使用mozilla开源的PDF.js. Github mozilla 官方demo 一 WebView设置:

  • Android开发之组件GridView简单使用方法示例

    本文实例讲述了Android开发之组件GridView简单使用方法.分享给大家供大家参考,具体如下: 案例:简单的图片浏览器,保存图片到相册 保存图片到相册 方法代码:https://www.jb51.net/article/158668.htm 废话不多说先上效果: 具体实现: 首先是布局文件: 1.一个GridView(展示所有的图片) 2.一个ImageView(放选中的图片) <?xml version="1.0" encoding="utf-8"?&

  • Android编程之菜单Menu的创建方法示例

    本文实例讲述了Android编程之菜单Menu的创建方法.分享给大家供大家参考,具体如下: 在res目录下的menu文件夹下创建一个main.xml文件,内容如下: <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="

随机推荐