Android之增长的数字
本案例是使用开源组件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之增长的数字相关推荐
- 【增长的数字(仿支付宝资产数字)】
今天我们自定义一个TextView,它的名称叫做RiseNumberTextView. 我们在平时使用支付宝的时候会发现进入资产页面的时候,资产数据会从一个数一直不停的增长直至你的真实数据然后停止. ...
- 将tensorflow训练好的模型移植到Android (MNIST手写数字识别)
将tensorflow训练好的模型移植到Android (MNIST手写数字识别) [尊重原创,转载请注明出处]https://blog.csdn.net/guyuealian/article/det ...
- 第50篇 Android Studio实现生命数字游戏(五)计算星座数
第50篇 Android Studio实现生命数字游戏(五)计算星座数 1.变量说明: 1.1.统计圈数 2.计算命数 2.1.使用的数据 2.2.星座对应日期和数字 2.3.说明 2.4.代码 1. ...
- android手机操作手册,数字填图(Android版)操作手册.pdf
数字地质填图系统(AoRGMap) 操作手册 中国地质调查局发展研究中心 2013-12-11 目 录 一.概述1 1.系统功能1 2.硬件环境1 二.AoRGMap安装1 三.野外手图转出到Andr ...
- 第52篇 Android Studio实现生命数字游戏(七)ListView与适配器
第52篇 Android Studio实现生命数字游戏(七)ListView与适配器 1.ListView 1.1.适配界面 1.2.适配器 1.ListView 在布局中直接添加. 没有什么好说明, ...
- 第46篇 Android Studio实现生命数字游戏(一)数据分析
第46篇 Android Studio实现生命数字游戏(一)数据分析 1.数据 1.1.生日 1.2.生日数 1.3.天赋数 1.4.命数 1.5.星座数 2.数字对应的解析 1.数据 数据是在生命数 ...
- android EditText 弹出数字键盘
android EditText 弹出数字键盘 在xml中添加属性 android:digits="1234567890." 设置输入类型 txtBarCode.setInputT ...
- android 10 数字健康,Android P 的「数字健康」功能,实际体验如何?
Android P 的「数字健康」功能,实际体验如何? 2019-04-10 15:43:52 2点赞 5收藏 1评论 入手三星S10e也有一段时间,很多功能还没有细细体验,最近发现系统设置里有个「数 ...
- Android图标上显示数字
Android图标上显示数字或加上数字的功能,直到Android4.4也没有实现.所以要修改系统的应用launcher来实现该效果. 之前你可能要参考其他一些博客或资料,对launcher的架构有一个 ...
最新文章
- Windows 8 / 8.1 禁用驱动签名最详细图文教程
- String s=a+b+c,到底创建了几个对象?
- 如何理解c语言的变量,C语言中变量的理解.PDF
- 为什么你们的Note.js 里面没有sap.ui.core.Control.extend()这样的代码,但是runtime有自动生成有
- 面试题 gety() getTop() TranslationY关系
- 运算放大器基本公式_还在被三阶/四阶/运算放大器滤波器PLL这些概念困扰?这篇文章帮你搞懂它...
- 微信分享接口 略缩图 php
- 三维点云学习(4)5-DBSCNA python 复现-1- 距离矩阵法
- 旅游网之后台管理系统
- linux mysql统计次数_按条件计数 - MySQL统计函数记录_数据库技术_Linux公社-Linux系统门户网站...
- dfuse 的 GraphQL 端点现在提供经过 ABI 解码的数据库行为信息
- vscode怎样修改切换自动换行的快捷键
- 适合中学生看的英文电影
- Python数据可视化(微课版)-简介
- 婚姻中受伤的为什么总是女人
- LINUX修改DNS方法
- 一年前寫的:計算所得稅以及計算24點遊戲
- 明天就会有阳光...
- 张艾迪(创始人): 梦想与理想
- Get爱康icon诺迪克跑步机,让自律变成一种习惯~