国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android 仿余額寶數字跳動動畫效果完整代碼

2019-10-22 18:22:35
字體:
來源:轉載
供稿:網友

一:想都不用想的,有圖有真相,看著爽了,在看下面源碼

android,仿余額寶數字跳動,仿余額寶

二:實例源碼分析

①:首先定義接口

package com.demo.tools.view; /**  * 數字動畫自定義  *  * @author zengtao 2015年7月17日 上午11:48:27  *  */ public interface RiseNumberBase {   public void start();   public RiseNumberTextView withNumber(float number);   public RiseNumberTextView withNumber(float number, boolean flag);   public RiseNumberTextView withNumber(int number);   public RiseNumberTextView setDuration(long duration);   public void setOnEnd(RiseNumberTextView.EndListener callback); } 

②:自定義控件

package com.demo.tools.view; import android/271648.html">android.animation.ValueAnimator; import android.content.Context; import android.util.AttributeSet; import android.widget.TextView; import com.demo.tools.Utils; /**  * 數字動畫自定義  *  * @author zengtao 2015年7月17日 上午11:48:03  *  */ 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 = 1000;   /**    * 1.int 2.float    */   private int numberType = 2;   private boolean flags = true;   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() {       @Override       public void onAnimationUpdate(ValueAnimator valueAnimator) {         if (flags) {           setText(Utils.format(",##0.00").format(Double.parseDouble(valueAnimator.getAnimatedValue().toString())) + "");           if (valueAnimator.getAnimatedValue().toString().equalsIgnoreCase(number + "")) {             setText(Utils.format(",##0.00").format(Double.parseDouble(number + "")));           }         } else {           setText(Utils.format("##0.00").format(Double.parseDouble(valueAnimator.getAnimatedValue().toString())) + "");           if (valueAnimator.getAnimatedValue().toString().equalsIgnoreCase(number + "")) {             setText(Utils.format("##0.00").format(Double.parseDouble(number + "")));           }         }         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() {       @Override       public 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;   }   @Override   protected void onFinishInflate() {     super.onFinishInflate();   }   @Override   public void start() {     if (!isRunning()) {       mPlayingState = RUNNING;       if (numberType == 1)         runInt();       else         runFloat();     }   }   @Override   public RiseNumberTextView withNumber(float number, boolean flag) {     this.number = number;     this.flags = flag;     numberType = 2;     fromNumber = 0;     return this;   }   @Override   public RiseNumberTextView withNumber(float number) {     System.out.println(number);     this.number = number;     numberType = 2;     fromNumber = 0;     return this;   }   @Override   public RiseNumberTextView withNumber(int number) {     this.number = number;     numberType = 1;     fromNumber = 0;     return this;   }   @Override   public RiseNumberTextView setDuration(long duration) {     this.duration = duration;     return this;   }   @Override   public void setOnEnd(EndListener callback) {     mEndListener = callback;   } } 

③工具類的編寫

package com.demo.tools; import java.math.RoundingMode; import java.text.DecimalFormat; /**  * 配置文件  * @author zengtao 2015年7月17日 上午11:47:44  *  */ public class Utils {   /**    * 格式化    */   private static DecimalFormat dfs = null;   public static DecimalFormat format(String pattern) {     if (dfs == null) {       dfs = new DecimalFormat();     }     dfs.setRoundingMode(RoundingMode.FLOOR);     dfs.applyPattern(pattern);     return dfs;   } } 

三:主界面調用

package com.demo.ui; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import com.demo.tools.view.RiseNumberTextView; /**  * 數字動畫  *  * @author zengtao 2015年7月17日 上午11:48:54  *  */ public class MainActivity extends Activity {   private RiseNumberTextView number1, number2, number3, number4, number5;   private Button start;   @Override   protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.main_activity);     initView();   }   private void initView() {     number1 = (RiseNumberTextView) findViewById(R.id.number1);     number2 = (RiseNumberTextView) findViewById(R.id.number2);     number3 = (RiseNumberTextView) findViewById(R.id.number3);     number4 = (RiseNumberTextView) findViewById(R.id.number4);     number5 = (RiseNumberTextView) findViewById(R.id.number5);     start = (Button) findViewById(R.id.start);     start.setOnClickListener(listener);   }   OnClickListener listener = new OnClickListener() {     @Override     public void onClick(View v) {       if (v == start) {         initData();       }     }   };   private void initData() {     number1.withNumber(12.3f).start();     number2.withNumber(16.3f).start();     number3.withNumber(10.3f).start();     number4.withNumber(18.3f).start();     number5.withNumber(17.3f).start();   } } 

四:總結

demo下載地址

以上所述是小編給大家介紹的Android 仿余額寶數字跳動動畫效果完整代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大埔区| 佛冈县| 大埔区| 西华县| 兴文县| 新乐市| 贵定县| 阜新| 廊坊市| 蓬莱市| 灌南县| 唐河县| 壤塘县| 阜新市| 札达县| 大关县| 宿州市| 唐山市| 陇川县| 盐池县| 潞城市| 巴中市| 定陶县| 革吉县| 米易县| 民乐县| 武山县| 缙云县| 息烽县| 淮北市| 德惠市| 沛县| 邢台市| 三穗县| 芷江| 且末县| 芷江| 吉木萨尔县| 河西区| 仪征市| 高阳县|