Android金钱滚动效果-滚动的textView

废话少说,直接看效果.


1:控件效果:



2:控件代码:

import android.content.Context;
import android.os.Handler;
import android.util.AttributeSet;
import android.widget.TextView;
import com.fost.jhlc.util.NumberTool;

import java.math.BigDecimal;
import java.text.DecimalFormat;

/**
 * 金钱增减效果
 */
public class MagicTextView extends TextView {
    // 递减/递增 的变量值
    private double mRate;
    // 当前显示的值
    private double mCurValue;
    // 当前变化后最终状态的目标值
    private double mGalValue;
    // 控制加减法
    private int rate = 1;
    // 当前变化状态(增/减/不变)
    private boolean refreshing;
    private static final int REFRESH = 1;

    // 偏移量 主要用来进行校正距离。
    DecimalFormat fnum = new DecimalFormat( "0.00");

    private String beforeStr;        //滚动数字前面的字符串
    private String afterStr;         //滚动数字后面的字符串

    private Handler mHandler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            switch (msg. what) {

                case REFRESH:
                    if( rate* mCurValue < rate* mGalValue){
                        setText( beforeStr+ NumberTool.getNormalNumberFormat().format( mCurValue)+ afterStr); //格式+设置显示内容
                        mCurValue += mRate * rate;
                        mHandler.sendEmptyMessageDelayed( REFRESH, 50);
                    } else{
                        setText(beforeStr+NumberTool.getNormalNumberFormat().format( mGalValue)+ afterStr);
                        mCurValue = mGalValue;      //滚动完成之后当前值设置为目标值
                    }
                    break;
            }
        };
    };

    public MagicTextView(Context context) {
        super(context);
    }

    public MagicTextView(Context context, AttributeSet set) {
        super(context, set);
    }

    public MagicTextView(Context context, AttributeSet set, int defStyle) {
        super(context, set, defStyle);
    }


    public void setValue( double value) {
        mGalValue = value;
        mRate = Math.abs((mGalValue -mCurValue )/20);
        BigDecimal b = new BigDecimal( mRate);
        mRate = b.setScale(2, BigDecimal. ROUND_HALF_UP).doubleValue();
    }

    public void startScroll(String beforeStr, double value,String afterStr) {
        setValue(value);
        this.beforeStr = beforeStr== null? "":beforeStr;
        this.afterStr = afterStr== null? "":afterStr;
        doScroll();
    }

    private void doScroll() {
        //if ( refreshing)
            //return;

        if (mCurValue > mGalValue) {
            rate = -1;      //如果当前值大于目标值,向下滚动
        } else{
            rate = 1;       //如果当前值小于目标值,向上滚动
        }
        mHandler.sendEmptyMessage( REFRESH);
    }
}

控件使用方法:
xml中定义控件
<com.example.scrolltext.MagicTextView
        android:id= "@+id/textView1"
        android:layout_width= "wrap_content"
        android:layout_height= "wrap_content"
        android:textSize= "35sp"
        android:textColor= "#FFFFFF00"
        android:text="25656.33"
        android:background= "@drawable/input_bg1" />
使用该控件的实例
magicTextView .startScroll ("人民币: " , 22800222.56,"元");//开始滚动
参数说明:
1:第一个参数是滚动时候,显示在滚动数量前面的字符串,可以为空.
2:第二个参数是需要滚动到的目的数字
3:第三个参数是滚动时候,显示在滚动数量后面的字符串,可以为空.


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值