本案例是使用开源组件RiseNumberTextView来实现类似手机支付宝中增长的数字效果,首先我们来看一下开源组件中的两个类分别如下:

package com.bear.risenumbertest.lib;public interface RiseNumberBase {public void start();public RiseNumberTextView withNumber(float number);public RiseNumberTextView withNumber(int number);public RiseNumberTextView setDuration(long duration);public void setOnEnd(RiseNumberTextView.EndListener callback);
}

另一个类:

package com.bear.risenumbertest.lib;import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;import com.nineoldandroids.animation.ValueAnimator;import java.text.DecimalFormat;public class RiseNumberTextView extends TextView implements RiseNumberBase{private static final int STOPPED = 0;private static final int RUNNING = 1;private int mPlayingState = STOPPED;private float number;private float fromNumber;private long duration=1500;/*** 1.int 2.float*/private int numberType=2;private DecimalFormat   fnum;private EndListener mEndListener=null;final static int[] sizeTable = { 9, 99, 999, 9999, 99999, 999999, 9999999,99999999, 999999999, Integer.MAX_VALUE };public RiseNumberTextView(Context context){super(context);}public RiseNumberTextView(Context context,AttributeSet attr){super(context,attr);}public RiseNumberTextView(Context context,AttributeSet attr,int defStyle){super(context,attr,defStyle);}public interface EndListener {public void onEndFinish();}public boolean isRunning() {return (mPlayingState == RUNNING);}private void runFloat(){ValueAnimator valueAnimator = ValueAnimator.ofFloat(fromNumber, number);valueAnimator.setDuration(duration);valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator valueAnimator) {setText(fnum.format(Float.parseFloat(valueAnimator.getAnimatedValue().toString())));if (valueAnimator.getAnimatedFraction()>=1){mPlayingState = STOPPED;if (mEndListener!=null)mEndListener.onEndFinish();}}});valueAnimator.start();}private void runInt(){ValueAnimator valueAnimator = ValueAnimator.ofInt((int)fromNumber, (int)number);valueAnimator.setDuration(duration);valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator valueAnimator) {setText(valueAnimator.getAnimatedValue().toString());if (valueAnimator.getAnimatedFraction()>=1){mPlayingState = STOPPED;if (mEndListener!=null)mEndListener.onEndFinish();}}});valueAnimator.start();}static int sizeOfInt(int x) {for (int i = 0;; i++)if (x <= sizeTable[i])return i + 1;}@Overrideprotected void onFinishInflate() {super.onFinishInflate();fnum=   new DecimalFormat("##0.00");}@Overridepublic void start() {if (!isRunning()) {mPlayingState = RUNNING;if (numberType==1)runInt();elserunFloat();}}@Overridepublic RiseNumberTextView withNumber(float number) {this.number=number;numberType=2;if (number>1000){fromNumber=number-(float)Math.pow(10,sizeOfInt((int)number)-2);}else {fromNumber=number/2;}return this;}@Overridepublic RiseNumberTextView withNumber(int number) {this.number=number;numberType=1;if (number>1000){fromNumber=number-(float)Math.pow(10,sizeOfInt((int)number)-2);}else {fromNumber=number/2;}return this;}@Overridepublic RiseNumberTextView setDuration(long duration) {this.duration=duration;return this;}@Overridepublic void setOnEnd(EndListener callback) {mEndListener=callback;}}

将这两个类集成到我们的工程中后,就可以使用了,下面这个是使用范例:

package com.bear.risenumbertest;import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.Toast;import com.bear.risenumbertest.lib.RiseNumberTextView;
import com.bear.risenumbertest.lib.RiseNumberTextView.EndListener;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取到RiseNumberTextView对象RiseNumberTextView rnTextView = (RiseNumberTextView) findViewById(R.id.risenumber_textview);// 设置数据rnTextView.withNumber(2666.50f);// 设置动画播放时间rnTextView.setDuration(5000);// 开始播放动画rnTextView.start();// 监听动画播放结束rnTextView.setOnEnd(new EndListener() {@Overridepublic void onEndFinish() {Toast.makeText(MainActivity.this, "数据增长完毕...",Toast.LENGTH_SHORT).show();}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}

附上效果图:

最后附上完整的工程源码链接:

android之增长的数字动画

Android之增长的数字相关推荐

  1. 【增长的数字(仿支付宝资产数字)】

    今天我们自定义一个TextView,它的名称叫做RiseNumberTextView. 我们在平时使用支付宝的时候会发现进入资产页面的时候,资产数据会从一个数一直不停的增长直至你的真实数据然后停止. ...

  2. 将tensorflow训练好的模型移植到Android (MNIST手写数字识别)

    将tensorflow训练好的模型移植到Android (MNIST手写数字识别) [尊重原创,转载请注明出处]https://blog.csdn.net/guyuealian/article/det ...

  3. 第50篇 Android Studio实现生命数字游戏(五)计算星座数

    第50篇 Android Studio实现生命数字游戏(五)计算星座数 1.变量说明: 1.1.统计圈数 2.计算命数 2.1.使用的数据 2.2.星座对应日期和数字 2.3.说明 2.4.代码 1. ...

  4. android手机操作手册,数字填图(Android版)操作手册.pdf

    数字地质填图系统(AoRGMap) 操作手册 中国地质调查局发展研究中心 2013-12-11 目 录 一.概述1 1.系统功能1 2.硬件环境1 二.AoRGMap安装1 三.野外手图转出到Andr ...

  5. 第52篇 Android Studio实现生命数字游戏(七)ListView与适配器

    第52篇 Android Studio实现生命数字游戏(七)ListView与适配器 1.ListView 1.1.适配界面 1.2.适配器 1.ListView 在布局中直接添加. 没有什么好说明, ...

  6. 第46篇 Android Studio实现生命数字游戏(一)数据分析

    第46篇 Android Studio实现生命数字游戏(一)数据分析 1.数据 1.1.生日 1.2.生日数 1.3.天赋数 1.4.命数 1.5.星座数 2.数字对应的解析 1.数据 数据是在生命数 ...

  7. android EditText 弹出数字键盘

    android EditText 弹出数字键盘 在xml中添加属性 android:digits="1234567890." 设置输入类型 txtBarCode.setInputT ...

  8. android 10 数字健康,Android P 的「数字健康」功能,实际体验如何?

    Android P 的「数字健康」功能,实际体验如何? 2019-04-10 15:43:52 2点赞 5收藏 1评论 入手三星S10e也有一段时间,很多功能还没有细细体验,最近发现系统设置里有个「数 ...

  9. Android图标上显示数字

    Android图标上显示数字或加上数字的功能,直到Android4.4也没有实现.所以要修改系统的应用launcher来实现该效果. 之前你可能要参考其他一些博客或资料,对launcher的架构有一个 ...

最新文章

  1. Windows 8 / 8.1 禁用驱动签名最详细图文教程
  2. String s=a+b+c,到底创建了几个对象?
  3. 如何理解c语言的变量,C语言中变量的理解.PDF
  4. 为什么你们的Note.js 里面没有sap.ui.core.Control.extend()这样的代码,但是runtime有自动生成有
  5. 面试题 gety() getTop() TranslationY关系
  6. 运算放大器基本公式_还在被三阶/四阶/运算放大器滤波器PLL这些概念困扰?这篇文章帮你搞懂它...
  7. 微信分享接口 略缩图 php
  8. 三维点云学习(4)5-DBSCNA python 复现-1- 距离矩阵法
  9. 旅游网之后台管理系统
  10. linux mysql统计次数_按条件计数 - MySQL统计函数记录_数据库技术_Linux公社-Linux系统门户网站...
  11. dfuse 的 GraphQL 端点现在提供经过 ABI 解码的数据库行为信息
  12. vscode怎样修改切换自动换行的快捷键
  13. 适合中学生看的英文电影
  14. Python数据可视化(微课版)-简介
  15. 婚姻中受伤的为什么总是女人
  16. LINUX修改DNS方法
  17. 一年前寫的:計算所得稅以及計算24點遊戲
  18. 明天就会有阳光...
  19. 张艾迪(创始人): 梦想与理想
  20. Get爱康icon诺迪克跑步机,让自律变成一种习惯~

热门文章

  1. 【2021牛客寒假第五场】C-比武招亲(下)欧拉降幂+多项式求逆预处理伯努利数计算等幂求和
  2. 女神节,买什么礼物可以保护眼睛?保护眼睛的护眼台灯分享
  3. Windows自带强大的入侵检测工具——Netstat 命令 查询是否中木马
  4. 逆波兰表达式的生成及计算
  5. 【Android】ActionBar监听返回按钮
  6. casio计算机模式,卡西欧计时模式怎么开
  7. 可视化拖拽组件库一些技术要点原理分析
  8. 2019硬件组答辩作品----基于STC89C52的智能小船
  9. #标题 已知从键盘上任意输入一个3位整数,编译计算并输出它的逆序数
  10. vue-router点击打开新的标签页的方法