关闭

Android仿余额宝金额动画

标签: android动画
725人阅读 评论(1) 收藏 举报
分类:

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;

@Override
protected 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);
}

@Override
public 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;
    }

}

@Override
public 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;
}

@Override
public 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);
}
}
1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

仿余额宝折线图

仿余额宝折线图完整代码 github 地址https://github.com/lpy19930103/AndroidLineChart ![效果图](http://img.blog.csdn.net/20160920163601586)/** * Created with Android S...
  • lpy19930103
  • lpy19930103
  • 2016-02-29 14:42
  • 886

余额宝业务架构 收藏备用

“余额宝”经过不到一年的发展,已获得大量用户的认可。本文将以故事的形式讲述“余额宝”背后那些鲜为人知的艰辛历程——如何从传统架构演变为云计算架构。         一年前的现在,在杭州支付宝大楼里有个叫“春秋书院”的闭关室,里面一群紧...
  • qq253113827
  • qq253113827
  • 2014-05-30 12:56
  • 1046

Android 仿余额宝数字动画实现

简介 好久没有写博客了,最近公司产品刚发布了,终于有一点休闲的时间了,趁这个空闲的时间,今天给大家写一个数字动画的效果,可能在以后的时间,或许大家会用的到,值得大家收藏,直接拿过去用就好了。 一:想都不用想的,有图有真相,看着爽了,在看下面源码 二:实例源码分析 ①:首先定义接口 p...
  • u011546655
  • u011546655
  • 2015-07-17 12:39
  • 2691

仿微信充值金额输入框-自定义EditText

效果图:只能输入数字,并且第一位不能是小数点,如果第一位是小数点则默认在小数点前加0,且精确到小数点第二位,0.01 实现代码如下: 一、先看下布局代码: <com.wallet.newnetclient.views.MoneyEditText android:inputType=...
  • yhy123456q
  • yhy123456q
  • 2017-04-25 11:14
  • 994

阿里架构师首次畅谈余额宝背后的故事

一年前的现在,在杭州支付宝大楼里有个叫“春秋书院”的闭关室,里面一群紧张而兴奋的年轻人在忙碌着。项目室巨大的落地窗前,站着一个面色凝重的人,他就是天弘基金创新事业部技术负责人樊振华,一个在金融IT领域有着丰富经验的老兵。他看着窗外川流不息的汽车,深深地吸了一口气。   这是一个只有代号但没有名...
  • proWang_cs
  • proWang_cs
  • 2014-06-08 21:26
  • 2317

余额宝技术架构及演进

陈雨,具有 8 年的软件研发和技术管理工作经验,专注于互联网金融、云计算、大数据等领域的发展动态和创新,目前在天弘基金负责基金注册登记系统架构和研发工作。 余额宝总结起来包括这样几个属性,第一它是一个传统的货币基金,但它把 T + 0 做到极致,另外他管理大量的用户资产。同时他具备极简的用...
  • shizhiailian
  • shizhiailian
  • 2016-09-10 09:49
  • 800

android实现余额宝收益播报中数字显示动态效果

https://github.com/sd6352051/RiseNumber
  • u011272454
  • u011272454
  • 2014-08-25 14:04
  • 2429

仿支付宝数字跳动

今天群里有人讨论到支付宝的那个查看账单页面数字跳动刷新的功能,觉得挺有意思,而且在商城钱包之类的功能模块里都可以用到,所以就想自己也搞一个,思路还是比较直白的,如下: import android.content.Context; import android.graphics.Canvas; i...
  • u012210379
  • u012210379
  • 2015-09-10 13:46
  • 1733

android仿制应用宝的应用详情页

最近看到了应用宝的软件详情页,感觉不明觉厉的样子, 于是粗略的仿制了一下,发现做的还算是可以出来见人吧实现方法很简单,就是通过重写ScrollView的分发事件,详情请看代码。public class MultiScrollView extends ScrollView{ Scroller ...
  • recall2012
  • recall2012
  • 2016-01-13 17:49
  • 1681

iOS支付宝金额跳动的效果

#import "UILabel+JumpNumber.h" #import <objc/runtime.h>#define kRangeNumberKey @"RangeKey" //每次数字跳动相差的间隔数 #define kB...
  • qq_25639809
  • qq_25639809
  • 2017-03-06 12:03
  • 649
    个人资料
    • 访问:59914次
    • 积分:2040
    • 等级:
    • 排名:千里之外
    • 原创:140篇
    • 转载:2篇
    • 译文:0篇
    • 评论:6条
    文章分类
    最新评论