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方法销毁它,否则会造成内存泄露。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
您可能感兴趣的文章:android自定义倒计时控件示例Android自定义圆形倒计时进度条Android自定义照相机倒计时拍照Android 自定义闪屏页广告倒计时view效果Android自定义View获取注册验证码倒计时按钮Android自定义Chronometer实现短信验证码秒表倒计时功能Android自定义扇形倒计时实例代码Android自定义控件实现验证码倒计时Android自定义View倒计时圆Android使用属性动画如何自定义倒计时控件详解 总结以上是内存溢出为你收集整理的Android 自定义View之倒计时实例代码全部内容,希望文章能够帮你解决Android 自定义View之倒计时实例代码所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)