自定义倒计时TextView
来源:互联网 发布:诺基亚5800软件下载 编辑:程序博客网 时间:2024/06/07 00:37
I don't want to survive I want to live --- 鸡汤走起
做了这么多的项目 越来越反感重复的代码重复写了 有人说可以ctrl+c 和ctrl 但是有的代码很多 ,直接复制过来还得去整理,很烦. 所以决定要改掉这个习惯,尽量按照功能去把功能抽出来.今天就简单做了一个.虽然简陋,但是是开始 。分享一下.
每个项目都有获取验证码这个功能,而且这个逻辑一样,只是样式不一样罢了,由于以前都是在注册或者忘记密码出来,所以就抽出来一个父类。
代码如下
private static long millisInFuture = 60000;private static long countDownInterval = 1000;private TimeCount time;@BindView(R.id.edAccount)protected EditText edAccount;@BindView(R.id.btnGetCode)protected TextView tvGetCode;@BindView(R.id.edCode)protected EditText edCode;protected String account;protected String code;@OnClick(R.id.btnGetCode)public void onClick(View view) { getCode();}/* * 得到验证码 */private void getCode() { if (isMobileNoCorrect(edAccount)) { toSubscribe(HttpUtils.getApi().getCode(account), new ProgressSubscriber<String>(this) { @Override public void onNext(String httpResult) { } }); }}class TimeCount extends CountDownTimer { TextView tvGetCode; public TimeCount(long millisInFuture, long countDownInterval) { super(millisInFuture, countDownInterval); } public TimeCount(long millisInFuture, long countDownInterval, TextView tvGetCode) { super(millisInFuture, countDownInterval); this.tvGetCode = tvGetCode; } @Override public void onFinish() {// 计时完毕 tvGetCode.setText("获取验证码"); tvGetCode.setClickable(true); } @Override public void onTick(long millisUntilFinished) {// 计时过程 tvGetCode.setClickable(false);// 防止重复点击 tvGetCode.setText("剩余" + millisUntilFinished / 1000 + "秒"); }}用的也挺happy 可是项目突然在一个fragment里面出现了一个要获取验证码 顿时崩溃了. fragment 不能继承activity.
思前想后 这能自定义一个textView 这样就灵活多了.
private static final String INITTEXT = "获取验证码";private static final String FINISHTEXT = "重新获取";private long millisInFuture;// 结束的时间private int countDownInterval = 1000;//倒计时间隔 默认一秒private CountDownTimer timeCount;private boolean isRuning; // 是否正在运行private String mStartText;// 开始时文本private String mFinishText;// 完成倒计时后的文本显示private final int CODE = 1;//验证码private final int TIME = 2;// 时间private int type;public CountDownTextView(Context context) { this(context, null);}public CountDownTextView(Context context, AttributeSet attrs) { super(context, attrs); initData();}public void setCountDownInterval(int countDownInterval) { this.countDownInterval = countDownInterval;}public boolean isRuning() { return isRuning;}public void setRuning(boolean runing) { isRuning = runing;}public void setmFinishText(String mFinishText) { this.mFinishText = mFinishText;}public void setMillisInFuture(long millisInFuture) { this.millisInFuture = millisInFuture;}public void setmStartText(String mStartText) { this.mStartText = mStartText;}public void setTimeCount(CountDownTimer timeCount) { this.timeCount = timeCount;}public void setType(int type) { this.type = type;}/** * 初始化数据 */public void initData() { mStartText = INITTEXT; setText(mStartText); mFinishText = FINISHTEXT; millisInFuture = 60000; type = TIME;}/** * 开始倒计时 */public void startCountDown() { setClickable(false); setText(mStartText); isRuning = true; if (timeCount == null) { timeCount = new TimeCount(); } timeCount.start();}/** * 结束倒计时 */public void endCountDown() { setText(mFinishText); setClickable(true); isRuning = false;}/** * 停止 */public void stopCountDown() { endCountDown(); if (timeCount != null) { timeCount.cancel(); }}// 点击事件@Overridepublic boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { if (isRuning) { return false; } else { startCountDown(); } } return super.onTouchEvent(event);}/** * 时间倒计时 */class TimeCount extends CountDownTimer { public TimeCount() { super(millisInFuture, countDownInterval); } @Override public void onFinish() {// 计时完毕 endCountDown(); } @Override public void onTick(long millisUntilFinished) {// 计时过程 if (type == TIME) { setText(DateUtils.getFormatDate(DateUtils.COMMON_TIME, millisUntilFinished)); } else if (type == CODE) { StringBuilder builder = new StringBuilder(); builder.append("剩余").append(millisUntilFinished / 1000).append("秒"); setText(builder.toString()); } }}
只需要 调用startCountDown 就可以实现 倒计时功能 现在还没又发现什么问题 一起以后会继续更新一个这个控件..
0 0
- 自定义倒计时TextView控件
- 自定义倒计时TextView
- CountDownDigitalClock:倒计时的TextView
- 自定义倒计时
- TextView实现高仿京东活动倒计时
- 自定义textview
- 自定义textview
- 自定义TextView
- 自定义TextView
- TextView自定义
- 自定义TextView
- 自定义textView
- 自定义TextView
- 自定义TextView
- 自定义TextView
- 自定义倒计时button
- js自定义倒计时
- 自定义倒计时控件
- JVM调优总结(二)-一些概念
- SpringMvc+mybatis 配置
- GCD API讲解<二>
- web通讯-goeasy
- 2. Add Two Numbers(Medium)
- 自定义倒计时TextView
- OpenGL图像缩放的不同插值类型
- 活动运营5步走,打造一场完满的线下活动
- HTML基础之初识HTML
- POJ2431 贪心
- 文本相似度检测(网络爬虫去重算法)
- ip && canutils命令
- JVM调优总结(一)-- 一些概念
- iOS自定义转场动画无法用presentingViewControll(fromView)中的view问题