Introduction
Long time No blog, recently released the company's products, and finally have a bit of leisure, take advantage of this free time, today to write a digital animation effect, may be in the later time, perhaps we will use to, it is worth the collection, directly to the past with the good.
A: Do not want to think, there is a picture of the truth, look at the cool, in the following source
Second: Example source code Analysis①: First define the interface
Package com.demo.tools.view;/** * Digital Animation customization * * @author Zengtao July 17, 2015 Morning 11:48:27 * */public interface Risenumb erbase {public void start ();p ublic risenumbertextview withnumber (float number);p ublic Risenumbertextview Withnumber ( Float number, Boolean flag);p ublic risenumbertextview withnumber (int number);p ublic Risenumbertextview setduration ( Long duration);p ublic void Setonend (Risenumbertextview.endlistener callback);}
②: Custom Controls
Package Com.demo.tools.view;import Android.animation.valueanimator;import Android.content.context;import Android.util.attributeset;import Android.widget.textview;import com.demo.tools.utils;/** * Digital Animation Customization * * @author Zengtao July 17, 2015 Morning 11:48:03 * */public class Risenumbertextview extends TextView implements Risenumberbase {private static FINA l int STOPPED = 0;private static final int RUNNING = 1;private int mplayingstate = stopped;private float number;private fl Oat 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, 9999999 9, 999999999, integer.max_value};p ublic 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) {if (flags) {SetText (Utils.format (", # #0.00"). Format (double.parsedouble (Valueanimator.getanimatedvalue (). toString ())) + ""); if (Valueanimator.getanimatedvalue ( ). ToString (). Equalsignorecase (number + "")) {SetText (Utils.format (", # #0. xx"). Format (double.parsedouble (number + "") ));}} else {SetText (Utils.format ("# #0. xx"). 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 () { @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 ();} @Overridepublic void Start () {if (!isrunning ()) {mplayingstate = running;if (Numbertype = = 1) runint (); Elserunfloat ();}} @Overridepublic Risenumbertextview Withnumber (float number, Boolean flag) {This.number = Number;this.flags = Flag; Numbertype = 2;frOmnumber = 0;return This;} @Overridepublic Risenumbertextview Withnumber (float number) {System.out.println (number); this.number = number; Numbertype = 2;fromnumber = 0;return this;} @Overridepublic risenumbertextview withnumber (int number) {This.number = Number;numbertype = 1;fromnumber = 0;return this ;} @Overridepublic Risenumbertextview setduration (long duration) {this.duration = Duration;return this;} @Overridepublic void Setonend (Endlistener callback) {Mendlistener = callback;}}
③ the authoring of tool classes
Package Com.demo.tools;import Java.math.roundingmode;import java.text.decimalformat;/** * profile * @author Zengtao July 17, 2015 Morning 11:47:44 * */public class Utils {/** * formatted */private static DecimalFormat Dfs = null;public static Decima Lformat format (String pattern) {if (Dfs = = null) {DFS = new DecimalFormat ();} Dfs.setroundingmode (Roundingmode.floor);d fs.applypattern (pattern); return DFS;}}
Three: main interface call
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;/** * Digital Animation * * @author Zengtao July 17, 2015 Morning 11:48:54 * */public class Mainactivity extends Activity {private RISENUMBERTEXTV Iew Number1, Number2, Number3, Number4, number5;private Button start, @Overrideprotected 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 () {@overridepublic 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 ();}
Four: summarythe above is completed, a digital animation of the custom, looks very simple, so xxx, rinsed, directly can, if you like, who have the need, you can directly take to use.
demo:http://download.csdn.net/detail/u011546655/8908663
Copyright NOTICE: This article for Bo Master original article, without Bo Master permission not reproduced.
Android Imitation Balance Treasure Digital animation implementation