Android仿余额宝金额动画

来源:互联网 发布:51单片机指令集ppt 编辑:程序博客网 时间:2024/04/26 01:00

Android仿余额宝金额动画

package com.lance.widget;import java.text.DecimalFormat;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import android.content.Context;import android.os.Handler;import android.os.Message;import android.util.AttributeSet;import android.util.Log;import android.widget.TextView;public class RunningTextView extends TextView {public double content;// 最后显示的数字private int frames = 25;// 总共跳跃的帧数,默认25跳private double nowNumber = 0.00;// 显示的时间private ExecutorService thread_pool;private Handler handler;private DecimalFormat formater;// 格式化时间,保留两位小数public RunningTextView(Context context, AttributeSet attrs, int defStyle) {    super(context, attrs, defStyle);    init();}public RunningTextView(Context context, AttributeSet attrs) {    super(context, attrs);    init();}public RunningTextView(Context context) {    super(context);    init();}public int getFrames() {    return frames;}// 设置帧数public void setFrames(int frames) {    this.frames = frames;}/** * 设置数字格式,具体查DecimalFormat类的api * @param pattern */public void setFormat(String pattern) {    formater = new DecimalFormat(pattern);}// 初始化private void init() {    thread_pool = Executors.newFixedThreadPool(2);// 2个线程的线程池    formater = new DecimalFormat("00.00");// 最多两位小数,而且不够两位整数用0占位。可以通过setFormat再次设置    handler = new Handler() {        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            RunningTextView.this.setText(formater.format(nowNumber)                    .toString());// 更新显示的数字            nowNumber += Double.parseDouble(msg.obj.toString());// 跳跃arg1那么多的数字间隔//              Log.v("nowNumber增加之后的值", nowNumber + "");            //            if (nowNumber < content) {                Message msg2 = handler.obtainMessage();                msg2.obj = msg.obj;                handler.sendMessage(msg2);// 继续发送通知改变UI            } else {                RunningTextView.this.setText(formater.format(content)                        .toString());// 最后显示的数字,动画停止            }        }    };}/** * 播放数字动画的方法 * * @param moneyNumber */public void playNumber(double moneyNumber) {    if (moneyNumber == 0) {        RunningTextView.this.setText("0.00");        return;    }    content = moneyNumber;// 设置最后要显示的数字    nowNumber = 0.00;// 默认都是从0开始动画    thread_pool.execute(new Runnable() {        @Override        public void run() {            Message msg = handler.obtainMessage();            double temp = content / frames;            msg.obj = temp < 0.01 ? 0.01 : temp;// 如果每帧的间隔比1小,就设置为1//              Log.v("每帧跳跃的数量:", "" + msg.obj.toString());            handler.sendMessage(msg);// 发送通知改变UI        }    });}}

在activity中使用

package com.lance.runningtextview;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.util.Log;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends ActionBarActivity implements OnClickListener {private Button mBtrmb;private Button mBtdollar;private Button mBturo;private com.lance.widget.RunningTextView mRunningtextview;private EditText mEdit;private Button mBtplay;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    bindViews();    // 设置数字格式,具体查DecimalFormat类的api    mRunningtextview.setFormat("00.00");    mBtplay.setOnClickListener(this);    mBtrmb.setOnClickListener(this);    mBtdollar.setOnClickListener(this);    mBturo.setOnClickListener(this);}private void bindViews() {    mBtrmb = (Button) findViewById(R.id.btrmb);    mBtdollar = (Button) findViewById(R.id.btdollar);    mBturo = (Button) findViewById(R.id.bturo);    mRunningtextview = (com.lance.widget.RunningTextView) findViewById(R.id.runningtextview);    mEdit = (EditText) findViewById(R.id.edit);    mBtplay = (Button) findViewById(R.id.btplay);}@Overridepublic void onClick(View v) {    switch (v.getId()) {    case R.id.btplay:        // 播放数字动画        String temp = mEdit.getText().toString();        Log.v("temp:", temp);        if(!temp.equals("")){            double number = Double.parseDouble(temp);            mRunningtextview.playNumber(number);        }        break;    case R.id.btrmb:        Toast.makeText(this, "use the symbol ¥ ", Toast.LENGTH_SHORT).show();        mRunningtextview.setFormat("¥00.00");        break;    case R.id.bturo:        Toast.makeText(this, "use the symbol € ", Toast.LENGTH_SHORT).show();        mRunningtextview.setFormat("€00.00");        break;    case R.id.btdollar:        Toast.makeText(this, "use the symbol $ ", Toast.LENGTH_SHORT).show();        mRunningtextview.setFormat("$00.00");        break;    }}@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;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {    // Handle action bar item clicks here. The action bar will    // automatically handle clicks on the Home/Up button, so long    // as you specify a parent activity in AndroidManifest.xml.    int id = item.getItemId();    if (id == R.id.action_settings) {        Toast.makeText(this, "Oh yeah~", Toast.LENGTH_SHORT).show();        return true;    }    return super.onOptionsItemSelected(item);}}
0 0