Android 自定义TextView 左右滑动实现数字自增长

相信大家都安装过支付宝,在查看昨日收益,那人命币暴涨是否让人很兴奋!今天像大家介绍的是自己实现的另一种效果,左右滑动实现金币和人民币的换算

 先看效果吧,模拟器太卡,效果太差了,大家将就一下吧


 自定的代码如下

public class JinBiText extends TextView implements
android.view.GestureDetector.OnGestureListener {
// 递减/递增 的变量值
private double mRate;
// view 设置的值
private double mValue;
private GestureDetector gd; // 手势监听器
// 当前显示的值
private double mCurValue;
// 当前变化后最终状态的目标值
private double mGalValue;
// 控制加减法
private double rate = 1;
// 当前变化状态(增/减/不变)
private boolean refreshing;
private static final int JINBI = 1;
private static final int RMB = 2;
DecimalFormat fnum1 = new DecimalFormat("0");// DecimalFormat 是 NumberFormat
// 的一个具体子类,用于格式化十进制数
DecimalFormat fnum2 = new DecimalFormat("0.0");
private Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {


case JINBI:
if (rate * mCurValue < mGalValue) {
refreshing = true;
setText(fnum1.format(mCurValue) + "金币");
mCurValue += mRate * rate;
mHandler.sendEmptyMessageDelayed(JINBI, 50);
} else {
refreshing = false;
setText(fnum1.format(mGalValue) + "金币");
}
break;


case RMB:
if (rate * mCurValue < (mGalValue * rate)) {
refreshing = true;
setText(fnum2.format((mCurValue * 0.1)) + "元");
mCurValue += mRate * rate;
mHandler.sendEmptyMessageDelayed(RMB, 100);
} else {
refreshing = false;
setText(fnum2.format((mGalValue * 0.1)) + "元");
}
break;


default:
break;
}
};
};


public JinBiText(Context context) {
super(context);


}


public JinBiText(Context context, AttributeSet set) {
super(context, set);
gd = new GestureDetector(this);// 初始化手势
}


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


}

@Override
public boolean onDown(MotionEvent arg0) {
// TODO Auto-generated method stub
return false;
}

public void setValue(double value) {//设置要显示的数值
mCurValue = 0.00;
mGalValue = isShown() ? value : 0;
mValue = value;
mRate = (double) (mValue / 20.00);
BigDecimal b = new BigDecimal(mRate);
mRate = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
setJibiDisplay();
}
private void setJibiDisplay() {// 金币的显示方式
mCurValue = 0.00;
mGalValue = 0;
mRate = (double) (mValue / 20.00);
BigDecimal b = new BigDecimal(mRate);
mRate = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
rate = 1;
mGalValue = mValue;
mHandler.sendEmptyMessage(JINBI);
}
private void setRMBDisplay() {// 人民币的显示方式
mCurValue = 0.00;
mRate = (double) (mValue / 2.00);
BigDecimal b = new BigDecimal(mRate);
mRate = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
rate = 0.1;
mGalValue = mValue;
mHandler.sendEmptyMessage(RMB);
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float arg2,
float arg3) {
// 向左/上滑动
if (e1.getX() - e2.getX() > 30) {
setJibiDisplay();
}
// 向右/下滑动
else if (e1.getX() - e2.getX() < -30) {
setRMBDisplay();
}
return false;
}

@Override
public void onLongPress(MotionEvent arg0) {
// TODO Auto-generated method stub

}


@Override
public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2,
float arg3) {
// TODO Auto-generated method stub
return false;
}

@Override
public void onShowPress(MotionEvent arg0) {
// TODO Auto-generated method stub


}

@Override
public boolean onSingleTapUp(MotionEvent arg0) {
// TODO Auto-generated method stub
return false;
}

@Override
public boolean onTouchEvent(MotionEvent event) {
gd.onTouchEvent(event);
return true;// 这里返回一定要为true ,不然监听不到onFling()事件
}

}



DEMO下载点击打开链接



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值