仿余額寶數(shù)字滾動(dòng)增長(zhǎng)的效果實(shí)現(xiàn)

這個(gè)已經(jīng)是被大家做爛了的效果了坡氯,之所以我自己做這個(gè)效果而不是直接從網(wǎng)上拷貝一個(gè)來(lái)用遂庄,主要是因?yàn)榫W(wǎng)上的工具不太符合我的要求都哭,大部分網(wǎng)友寫(xiě)的工具都不可以帶單位的详民,只是數(shù)字方面的增長(zhǎng)效果田弥,而我的APP中需要帶上單位帚呼,比如公里、升之類(lèi)的皱蹦,與其改人家的源碼不如自己寫(xiě)一個(gè)了煤杀。
先看效果圖:

1.gif

Android中的動(dòng)畫(huà)

這里用到了屬性動(dòng)畫(huà),Android中的動(dòng)畫(huà)主要分為三大類(lèi)沪哺,分別是視圖動(dòng)畫(huà)和屬性動(dòng)畫(huà)沈自。
視圖動(dòng)畫(huà)分為T(mén)ween Animation(補(bǔ)間動(dòng)畫(huà))和Frame Animation(逐幀動(dòng)畫(huà))
屬性動(dòng)畫(huà)分為ValueAnimator 和 ObjectAnimator;

這里一定要注意一下各種動(dòng)畫(huà)引入時(shí)Android的版本號(hào),否則動(dòng)畫(huà)不會(huì)啟用辜妓,視圖動(dòng)畫(huà)是API Level 1就引入的枯途,所以支持所有Android的版本,而屬性動(dòng)畫(huà)是API Level 11引入的籍滴,即Android 3.0才開(kāi)始有屬性動(dòng)畫(huà)相關(guān)的API,故而在使用屬性動(dòng)畫(huà)時(shí)一定要判斷API的版本酪夷,避免一些不必要的Bug.

實(shí)現(xiàn)思路

整個(gè)思路很簡(jiǎn)單,在使用這個(gè)組件的過(guò)程中有幾個(gè)點(diǎn)是要考慮進(jìn)去的孽惰,第一晚岭,可以是整數(shù)類(lèi)型也可以是浮點(diǎn)型的數(shù)字,所以這里要做標(biāo)識(shí)區(qū)分開(kāi)勋功,第二坦报,可以加入單位(核心需求),第三狂鞋,可以開(kāi)啟是否四舍五入片择,比如需要整數(shù)類(lèi)型的時(shí)候,而傳入的數(shù)字是浮點(diǎn)型骚揍,這時(shí)會(huì)自動(dòng)把傳入的浮點(diǎn)型轉(zhuǎn)化為整數(shù)類(lèi)型字管,這里就要考慮四舍五入的問(wèn)題了。

代碼實(shí)現(xiàn)

下面來(lái)看是如何實(shí)現(xiàn)的
實(shí)現(xiàn)類(lèi):


import android.animation.ValueAnimator;
import android.util.Log;
import android.view.animation.AccelerateInterpolator;
import android.widget.TextView;

/**
 * 類(lèi)描述: 創(chuàng)建人:賈真
 * 創(chuàng)建時(shí)間:2017/1/23 15:44 
 */
public class AutoIncrementUtil {

   public static final String FLOATTYPE="FloatType";
    public static final String INTTYPE="IntType";

    public static void startAnimation(String type,final TextView tvView,float floatValue
        ,boolean isRoundUp,final String danwei,int duration){
        ValueAnimator animator=null;
        if(type.equals(FLOATTYPE)){
              animator=ValueAnimator.ofFloat(0,floatValue);
            animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator valueAnimator) {
                    float curValue = (float)valueAnimator.getAnimatedValue();
                    Log.e("curValue ",curValue+"");
                    tvView.setText(NumUtil.FormatFloat(curValue)+danwei);
                }
            });
        }else if(type.equals(INTTYPE)){
            String targetValueString =NumUtil.FormatRoundUp(isRoundUp,floatValue);
            animator=ValueAnimator.ofInt(0,Integer.parseInt(targetValueString));
            animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator valueAnimator) {
                    int curValue = (int)valueAnimator.getAnimatedValue();
                    tvView.setText(curValue+danwei);
                }
            });
        }
        animator.setDuration(duration);
        animator.setInterpolator(new AccelerateInterpolator());
        animator.start();
    }

}

數(shù)字轉(zhuǎn)化工具類(lèi):

import java.text.DecimalFormat;


public class NumUtil {

    private NumUtil(){


    }

    public static String FormatFloat(float value){
        DecimalFormat df = new DecimalFormat("0.00");
        return df.format(value);
    }
    public static String FormatRoundUp(boolean isRoundUp,float value){
        DecimalFormat df;
        if(isRoundUp){
            df = new DecimalFormat("######0"); //四色五入轉(zhuǎn)換成整數(shù)

            return df.format(value);
        }else{
            Float f= new Float(value);
            int i=f.intValue();
            return String.valueOf(i);
        }
    }
}

如何使用:

  AutoIncrementUtil.startAnimation(AutoIncrementUtil.INTTYPE,NumView,153261.93f,false,"公里",1500);

應(yīng)該說(shuō)是非常簡(jiǎn)單了,主要用到了屬性動(dòng)畫(huà)的ValueAnimator的兩個(gè)方法嘲叔,ofInt和ofFloat脐供,剩下的都是按部就班的調(diào)用相關(guān)的方法即可,大家稍微閱讀一下源碼就應(yīng)該懂了借跪。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末政己,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子掏愁,更是在濱河造成了極大的恐慌歇由,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件果港,死亡現(xiàn)場(chǎng)離奇詭異沦泌,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)辛掠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門(mén)谢谦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人萝衩,你說(shuō)我怎么就攤上這事回挽。” “怎么了猩谊?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵千劈,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我牌捷,道長(zhǎng)墙牌,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任暗甥,我火速辦了婚禮喜滨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘撤防。我一直安慰自己虽风,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布即碗。 她就那樣靜靜地躺著焰情,像睡著了一般。 火紅的嫁衣襯著肌膚如雪剥懒。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,730評(píng)論 1 289
  • 那天合敦,我揣著相機(jī)與錄音初橘,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛保檐,可吹牛的內(nèi)容都是我干的耕蝉。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼夜只,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼垒在!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起扔亥,我...
    開(kāi)封第一講書(shū)人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤场躯,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后旅挤,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體踢关,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年粘茄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了签舞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡柒瓣,死狀恐怖儒搭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情芙贫,我是刑警寧澤师妙,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站屹培,受9級(jí)特大地震影響默穴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜褪秀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一蓄诽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧媒吗,春花似錦仑氛、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至甫何,卻和暖如春出吹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背辙喂。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工捶牢, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鸠珠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓秋麸,卻偏偏與公主長(zhǎng)得像渐排,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子灸蟆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容