翻滚的TextView
一、介绍
一个可以让数字滚动的TextView,它能兼容正数,负数,甚至是小数。翻滚的数字精度也完全可以由自己控制,每次可以变化精度的n倍,通过此功能可以实现倒数第一位翻转,倒数第二位翻转,倒数第n位翻转。支持设置开始翻滚的数值以及动画的最大时间。可以在数字后面设置单位,以及前面设置符号。支持控件属性设置。
二、开发背景
故事是这样的,在渤海西边,太行山与燕山的交界处有一个白夜国,灯神巨灵与太阳神羲和同时掌控。这里黑夜常常是白天,故得名白夜国。
白夜国有一个善良的国王,在国内有很高的声望,他崇拜太阳神,不喜欢白夜,智慧的他知道那是假象,是巨灵想要他的子民一直工作,而那样的工作会降低效率。他又不能公然反对灯神,毕竟灯神的初衷是为了国家,并且也做出一些牺牲。于是他想了一个非常简单的方法--让数字动起来。跳动的数字可以激励子民,提高效率,减少工作时间。
做事坚决果断的国王,想到方法后立即召见了朝中最有智慧的大臣。这群智者看到如此多聪明的人在一块无不感到诧异,以为将有什么大事发生,不久国王出来了,让坐立不安的大臣都回到自己的位置上。
看着宫殿中表情严肃的智者,国王小嘴向左微微上扬,说到,大家都知道,国家的人口正在不断上涨,我呢,想然让数字动起来,每涨一次动一次,这个你们预估需要多久实现。智者们相视一笑。一个智者站了起来,说道陛下这是不是你想要的,国王看到后,只是点了点头,表情没有太大变化,似乎一切都在预料之中。智者随即又有说道它不仅人口能使用,宫殿的建筑数,子民的工具数等都能使用。国外嘴角上扬,显得有些高兴,他高兴的智者能举一反三。当然这个智者们都知道。第一个智者刚说完,另一个智者站了起来说到:上个月财政收入是188.88万亿。上个月的粮食产量188.88亿斤,上个月...。人,建筑,工具都是完整的一个,但这些数据是不一定为整。我的可以完美解决。说完智者点了开始,数字开始翻滚了起来。翻滚的数字让智者们犹如打了鸡血一样,变得更加积极,另一智者站了起来,走到宫殿中间,微笑了一下,说道,其实当陛下说完以后我就知道了陛下的用心良苦,我没猜错的话陛下应该是想用数字激励子民,提高效率,减少工作时间。国王调整了一下坐姿,没有一丁点的慌乱,因为这已经不是第一次被猜中想法,他也很乐于这样。智者接着说道其实比正数更能激发子民的是负数,比如一个户人欠其他人的工具,黄金等等。而我的可以包含这一切。说完,点下了按钮,数字又翻滚了起来。这时角落的智者站了起来,说到我的没有太大的改进,只是总结了一下巨人的观点,然后稍稍改了一下。让数字精度,开始位置完全由自己控制,并且加了一些单位和符号,用来标识不同的数字。听到这国王竖起了拇指,说道今天大家表现的都很棒,今天你们的努力,会在不久的将来看到结果。灯神今天也很累了,大家也很辛苦,早点回去休息吧。
大臣们,都明白国王的拇指虽然是給所有人的,但都只是沾了最后一人的光,然而这并没有什么不好,所以也不多想,就各自回家,休息,迎接明日到来的太阳神。
三、使用
1、项目配置
1.1、在上图标注1的文件中找到相应位置加入下面代码
dependencies {
compile 'com.github.onlybeyond:NubmerTextVeiw:1.0.7'
}
1.2在上图标注2的文件中找到相应位置加入下面代码
allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}
1.3同步一下配置结束了
2.使用
1.gif2.1、正负数的使用
默认效果从零开始,以最小精度开始动画 ,支持正负数,可以直接设置
ntvTestOne.setNumberValue("100");
ntvTestOne.setNumberValue("-100");
2.gif
2.2支持小数,可以n倍精度变化,通过这个功能,可以实现倒数第一位滚动,倒数第二位
滚动,倒数n位滚动。
//三倍精度增长
ntvTestThree.setRollInt(3);
ntvTestTwo.setUseMax(true);
ntvTestThree.setNumberValue("100.9");
//倒数第二位变化
ntvTestFour.setRollInt(10);
ntvTestFour.setNumberValue("100.9");
//倒数第三位变化
ntvTestFive.setRollInt(100);
ntvTestFive.setNumberValue("100.9");
3.gif
2.3支持动画开始值的设定,以及动画最长时间的设置。这样可以拒绝从0开始的傻瓜式增长,通过该设置可以控制动画位数,比如168,设置成150开始,就是最后两位滚动。最长时间的设置可以保证当数字很大时,避免一直看动画的尴尬-> _-> ,支持动画结束以后的回调,可以查看动画开始时间,以及动画时间(时间与设定会有略微差距)。当设置了开始值又设定了动画时间,会取比较快的一种。
ntvTestSix.setNumberValue("95","100");
ntvTestSeven.setMaxAnimDuration(2000);
ntvTestSeven.setUseMax(true);
ntvTestSeven.setNumberTextViewListener(new N
umberTextView.NumberTextViewListener() {
@Override
public void animStart(long l) {
}
@Override
public void animEnd(long l, long l1) {
tvTestSevenTime.setText("时间:"+l1);
}
});
ntvTestSeven.setNumberValue("100");
2.4、支持数值前后添加文字,这样在数字前面添加符号,在数字后面添加单位,满足更多的应用场景。
ntvTestEight.setNumberValue("100");
ntvTestEight.setNumberValueSymbol("$");
ntvTestEight.setNumberValueUnit("元");
2.5支持属性配置文件,使用起来更佳简便
<com.onlybeyond.numbertextview.NumberTextView
android:id="@+id/ntv_test_nine"
app:ntvStartValue="80"
app:ntvRollInt="3"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
//Activity
ntvTestNine.setNumberValue("100.9");
四、总结
一名工程师,不仅要有眼前的代码,还要有读不懂的诗和去不了的远方。代码就像作者手中的笔,一行一类也可以塑造完美世界。
demo GitHub 下载地址
扫描下载demo
下载