Android 自定义View之倒计时实例代码

Android 自定义View之倒计时实例代码

需求:

大多数app在注册的时候,都有一个获取验证码的按钮,点击后,访问接口,最终用户会收到短信验证码。为了不多次写这个获取验证码的接口,下面将它自定义成一个view,方便使用。

分析一下,这是一个TextView,点击的时候变色,不能再点击,同时里面的倒计时开始显示。那么就有了下面的代码

代码:

/** * 通过selector选择器来改变背景,其中倒计时运行时为android:state_enabled="true", * 不显示倒计时时为android:state_enabled="false"; * */ public class CountDownView extends TextView { private long totalMills = 10 * 1000;//倒计时的总时间,根据需要更改这个值 private long interval = 1000;//倒计时的时间间隔 public CountDownView(Context context) { super(context); } public CountDownView(Context context, AttributeSet attrs) { super(context, attrs); } public CountDownView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } private TimeCount mTimeCount; private void startCount(long totalMills, long countDownInterval) { if (mTimeCount == null) mTimeCount = new TimeCount(totalMills, countDownInterval); mTimeCount.start(); } public void start(){ defaultText = getText().toString(); startCount(totalMills, interval); } public void cancel() { if (mTimeCount != null){ mTimeCount.onFinish(); mTimeCount.cancel(); } } String defaultText = "";//获取到在点击之前的文本内容 class TimeCount extends CountDownTimer { public TimeCount(long millisInFuture, long countDownInterval) { super(millisInFuture, countDownInterval); } @Override public void onTick(long millisUntilFinished) { setEnabled(false); setText(millisUntilFinished / 1000 + "S"); } @Override public void onFinish() { setEnabled(true); setText(defaultText); } } }

测试代码:

public class MainActivity extends Activity implements OnClickListener { private CountDownView mCountDownView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mCountDownView = (CountDownView) findViewById(R.id.tv_1); mCountDownView.setOnClickListener(this); findViewById(R.id.tv_2).setOnClickListener(this); } int count = 0; DemoThread thread; @Override public void onClick(View v) { if(v.getId() == R.id.tv_1){ mCountDownView.start(); thread = new DemoThread(); thread.start(); } else if (v.getId() == R.id.tv_2) { mCountDownView.cancel(); System.out.println("wisely 取消倒计时"); } } class DemoThread extends Thread{ @Override public void run() { while (count < 10) { SystemClock.sleep(100); count++; System.out.println("wisely count:" + count); } } } }

总结:

1、使用的时候,为该控件设置点击事件,然后调用start()方法,剩下的就是你自己的代码,一般都是联网调接口。

2、获取验证码的控件背景可以设置为selector选择器,设置android:state_enabled属性。上面例子的selector选择器代码如下:

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_enabled="true" android:drawable="@color/green"/> <item android:state_enabled="false" android:drawable="@color/red"/> </selector>

3、在退出activity时,记得调用控件的cancel方法销毁它,否则会造成内存泄露。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

时间: 2024-09-20 05:39:08

Android 自定义View之倒计时实例代码的相关文章

Android 自定义View 密码框实例代码_Android

暴露您view中所有影响可见外观的属性或者行为. •通过XML添加和设置样式 •通过元素的属性来控制其外观和行为,支持和重要事件交流的事件监听器 详细步骤见:Android 自定义View步骤 效果图展示: 支持的样式 可以通过XML定义影响外边和行为的属性如下 边框圆角值,边框颜色,分割线颜色,边框宽度,密码长度,密码大小,密码颜色 <declare-styleable name="PasswordInputView"> <attr name="borde

Android 自定义View 密码框实例代码

暴露您view中所有影响可见外观的属性或者行为. •通过XML添加和设置样式 •通过元素的属性来控制其外观和行为,支持和重要事件交流的事件监听器 详细步骤见:Android 自定义View步骤 效果图展示: 支持的样式 可以通过XML定义影响外边和行为的属性如下 边框圆角值,边框颜色,分割线颜色,边框宽度,密码长度,密码大小,密码颜色 <declare-styleable name="PasswordInputView"> <attr name="borde

Android自定义手机界面状态栏实例代码

前言 我们知道IOS上的应用,状态栏的颜色总能与应用标题栏颜色保持一致,用户体验很不错,那安卓是否可以呢?若是在安卓4.4之前,答案是否定的,但在4.4之后,谷歌允许开发者自定义状态栏背景颜色啦,这是个不错的体验!若你手机上安装有最新版的qq,并且你的安卓SDK版本是4.4及以上,你可以看下它的效果: 实现这个效果有两个方法: 1.在xml中设置主题或自定义style: Theme.Holo.Light.NoActionBar.TranslucentDecor Theme.Holo.NoActi

Android 自定义 view 控件实例

Android自定义view通过继承系统的View并重写部分方法来满足自己的特定需要.首先我们来看一下都有哪些方法可能需要被重写: onMeasure() 检测View组件及其子组件的大小 onLayout() 当该组件需要分配其子组件的位置.大小时 onTouchEvent 当发生触屏事件时 onDraw() 当组件将要绘制它的内容时 onKeyDown 当按下某个键盘时 onKeyUp  当松开某个键盘时 onTrackballEvent 当发生轨迹球事件时 onSizeChange() 当

Android自定义View实现带数字的进度条实例代码_Android

第一步.效果展示 图1.蓝色的进度条 图2.红色的进度条 图3.多条颜色不同的进度条 图4.多条颜色不同的进度条 第二步.自定义ProgressBar实现带数字的进度条 0.项目结构 如上图所示:library项目为自定义的带数字的进度条NumberProgressBar的具体实现,demo项目为示例项目以工程依赖的方式引用library项目,然后使用自定义的带数字的进度条NumberProgressBar来做展示   如上图所示:自定义的带数字的进度条的library项目的结构图   如上图所

Android自定义View实现带数字的进度条实例代码

第一步.效果展示 图1.蓝色的进度条 图2.红色的进度条 图3.多条颜色不同的进度条 图4.多条颜色不同的进度条 第二步.自定义ProgressBar实现带数字的进度条 0.项目结构 如上图所示:library项目为自定义的带数字的进度条NumberProgressBar的具体实现,demo项目为示例项目以工程依赖的方式引用library项目,然后使用自定义的带数字的进度条NumberProgressBar来做展示 如上图所示:自定义的带数字的进度条的library项目的结构图 如上图所示:de

Android 自定义view实现进度条加载效果实例代码

这个其实很简单,思路是这样的,就是拿view的宽度,除以点的点的宽度+二个点 之间的间距,就可以算出大概能画出几个点出来,然后就通过canvas画出点,再然后就是每隔多少时间把上面移动的点不断的去改变它的坐标就可以, 效果如下: 分析图: 代码如下: package com.example.dotloadview; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bit

Android自定义View倒计时圆

本文实例为大家分享了Android自定义View倒计时圆的具体代码,供大家参考,具体内容如下 创建attr <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="CountDownView"> <!--颜色--> <attr name="ringColor" format=&q

Android App中自定义View视图的实例教程_Android

一.基础很多的Android入门程序猿来说对于Android自定义View,可能都是比较恐惧的,但是这又是高手进阶的必经之路,所有准备在自定义View上面花一些功夫,多写一些文章.先总结下自定义View的步骤: 1.自定义View的属性 2.在View的构造方法中获得我们自定义的属性 3.重写onMesure 4.重写onDraw 我把3用[]标出了,所以说3不一定是必须的,当然了大部分情况下还是需要重写的. 1.自定义View的属性,首先在res/values/  下建立一个attrs.xml