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的架构有一个 ...
最新文章
- 真,数学之美!用数学方式打开Facebook新Logo!旋转变换?
- 树莓派 自动设置分辨率
- StoryBoard学习..(很详细.)
- DoraCMS 源码知识点备注
- kubernetes对象之deployment
- 网站漏洞检测针对区块链网站安全分析
- 小白学Linux(一:开门见山)
- dorado 7 怎么样_一点点奶茶怎么样?消费者眼中的网红奶茶
- 三. 2d-2d三角化求路标point
- 简介NoSqlOnSql在SQL上实现NOSQL
- Meego系统的终结 诺基亚QT部门解散
- 一起来学k8s 37.二进制k8s集群etcd备份和恢复
- 如何用计算机自动求和,如何在excel中自动求和 自动求和的解决方法及步骤
- 2020-07-08 HTTP协议学习
- Virtual host / experienced an error on node rabbit@ xx and may be inaccessible Totals问题的解决
- postman与fiddler
- 大数据学习路线-入门精简
- 快播王欣最新项目大揭秘!
- C++语言程序设计全真模拟试卷,2017年全国计算机二级C++语言程序设计考试试题...
- 利用 Heritrix 构建特定站点爬虫
热门文章
- 数据探索分析-EDA
- 5款全球知名的JavaScript混淆加密工具
- vs studio 2010旗舰版下载
- 基本函数依赖和候选键_白话详解数据库函数依赖和Armstrong公理及其引理
- C语言数组指针和指针数组实例演示
- Visual question answering: a state‑of‑the‑art review(二)
- Android自定义View如此简单 实现点击动画+进度刷新的提交/下载按钮(填坑面试题)
- 《算法零基础100讲》(第6讲) 日期算法
- 世故型性格的优缺点,世故型人格的职业发展方向
- 淘汰纸质巡检,智能化巡检更高效