本案例是使用开源组件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. 真,数学之美!用数学方式打开Facebook新Logo!旋转变换?
  2. 树莓派 自动设置分辨率
  3. StoryBoard学习..(很详细.)
  4. DoraCMS 源码知识点备注
  5. kubernetes对象之deployment
  6. 网站漏洞检测针对区块链网站安全分析
  7. 小白学Linux(一:开门见山)
  8. dorado 7 怎么样_一点点奶茶怎么样?消费者眼中的网红奶茶
  9. 三. 2d-2d三角化求路标point
  10. 简介NoSqlOnSql在SQL上实现NOSQL
  11. Meego系统的终结 诺基亚QT部门解散
  12. 一起来学k8s 37.二进制k8s集群etcd备份和恢复
  13. 如何用计算机自动求和,如何在excel中自动求和 自动求和的解决方法及步骤
  14. 2020-07-08 HTTP协议学习
  15. Virtual host / experienced an error on node rabbit@ xx and may be inaccessible Totals问题的解决
  16. postman与fiddler
  17. 大数据学习路线-入门精简
  18. 快播王欣最新项目大揭秘!
  19. C++语言程序设计全真模拟试卷,2017年全国计算机二级C++语言程序设计考试试题...
  20. 利用 Heritrix 构建特定站点爬虫

热门文章

  1. 数据探索分析-EDA
  2. 5款全球知名的JavaScript混淆加密工具
  3. vs studio 2010旗舰版下载
  4. 基本函数依赖和候选键_白话详解数据库函数依赖和Armstrong公理及其引理
  5. C语言数组指针和指针数组实例演示
  6. Visual question answering: a state‑of‑the‑art review(二)
  7. Android自定义View如此简单 实现点击动画+进度刷新的提交/下载按钮(填坑面试题)
  8. 《算法零基础100讲》(第6讲) 日期算法
  9. 世故型性格的优缺点,世故型人格的职业发展方向
  10. 淘汰纸质巡检,智能化巡检更高效