8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

Android倒计时控件,通常在发送验证码时用得最多。其实Android系统提供了一个倒计时控件叫做CountDownTimer,不过这个控件没有与接口控件绑定,在这里,我要讲述的是如何自己写一个倒计时的控件。

源码

首先放上CountDownButton的源码

/**

* CountDownButton used for send phone verify code etc.

*

* @author Jamling

*/

public class CountDownButton extends RoundButton {

private long totalTime = 60 * 1000;// 默认60秒

private String label = "秒后重发";

private long time;

private long step = 1000;

private int interval = 1000;

private Handler mHandler = new Handler() {

public void handleMessage(android.os.Message msg) {

time -= step;

if (time <= 0) {

reset();

}

else {

refreshText();

mHandler.sendEmptyMessageDelayed(0, step);

}

}

};

public CountDownButton(Context context) {

this(context, null);

}

public CountDownButton(Context context, AttributeSet attrs) {

super(context, attrs);

init(context, attrs);

}

private void init(Context context, AttributeSet attrs) {

setHintTextColor(getTextColors());

}

public void start() {

this.setEnabled(false);

this.time = totalTime;

refreshText();

mHandler.sendEmptyMessageDelayed(0, step);

}

private void refreshText() {

long t = (time / interval);

if (t > 0) {

this.setText(t + label);

}

}

public void reset() {

setText(null);

setEnabled(true);

}

/**

* Set count down total time

*

* setTotalTime(30000);// 30s

*

*

* @param totalTime

*

* @return CountDownButton self

*/

public CountDownButton setTotalTime(long totalTime) {

this.totalTime = totalTime;

return this;

}

/**

* Set count down step

*

* setStep(1000);// 1s

*

*

* @param step count down step, micro seconds

*

* @return CountDownButton self

*/

public CountDownButton setStep(long step) {

if (step > 0) {

this.step = step;

}

return this;

}

/**

* Set count down text refresh interval.

*

* setInterval(1000);//1s, text display: (getRemainingTime() / interval) + label

*

*

* @param interval count down text refresh interval, micro seconds

*

* @return CountDownButton self

*/

public CountDownButton setInterval(int interval) {

if (interval > 0) {

this.interval = interval;

}

return this;

}

public long getRemainingTime() {

return time;

}

public long getStep() {

return step;

}

}

实现相对简单,通过Handler的sendEmptyMessageDelayed来定时发送消息,实现计时并更新接口,当然,也可以通过Timer来实现,不过因为Android UI线程的限制,不如使用Handler来得简洁。CountDownButton向外暴露设置step 步长,totalTime总计时等方法。

布局

android:id="@+id/btn2"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:background="@color/black_333333"

android:hint="点击发送验证码"

android:padding="8dp"

android:radius="8dp"

android:textColor="@color/white"

android:textSize="14sp"

app:borderColor="@color/black_alpha_60"

app:borderWidth="0dp"

android:layout_marginTop="20dp" />

Activity中使用

myBtn2 = (CountDownButton) btn2;

// btn2 text: enable: white; normal: gray

ColorStateList csl2 = new ColorStateList(new int[][]{{android.R.attr.state_enabled}, {}},

new int[]{0xffffffff, 0xffcccccc});

myBtn2.setTextColor(csl2);

myBtn2.setTotalTime(10000);

// btn2 bg

int r = AppUtils.dp2px(this, 4);

RoundedColorDrawable normal = new RoundedColorDrawable(r, AppUtils.getColor(this, R.color.black_333333));

normal.addStateColor(new int[]{android.R.attr.state_enabled, android.R.attr.state_window_focused}, AppUtils

.getColor(this, R.color.colorPrimary)).applyTo(myBtn2);

当CountDownButton开时计时时,它将进入disable状态(不可点击),button的外观也随之变化,当计时结束后,button恢复原来的状态。

示例代码中的button样式与状态,都是通过代码控制的。详细可以查看本站另一篇文章:Android使用代码来实现StateListDrawable

计时开始代码:

@Override

public void onClick(View v) {

if (v == myBtn2) {

myBtn2.start();

return;

}

super.onClick(v);

}

关于

QuickAF 是一个Android平台上的app快速开发框架,欢迎读者在github star或fork。本人写作水平有限,欢迎广大读者指正,如有问题,可与我直接联系或在我的官方博客中给出评论。

参考

android2.2 倒计时程序eclipse,Android倒计时控件相关推荐

  1. Android开源控件收集整理

    一 .基本控件 TextView HTextView 一款支持TextView文字动画效果的Android组件库.GitHub - hanks-zyh/HTextView: Animation eff ...

  2. Android 开源控件与常用开发框架开发工具类

    Android的加载动画AVLoadingIndicatorView 项目地址: https://github.com/81813780/AVLoadingIndicatorView 首先,在 bui ...

  3. Android Chronometer控件

    1. Chronometer类 Chronometer是一个简单的计时器. 主要配置 format,显示格式,默认是"MM:SS"或"H:MM:SS",以%s来 ...

  4. 【Android从零单排系列十一】《Android视图控件——日历、日期、时间选择控件》

    目录 一.日历.日期.时间组件基本介绍 二.几种常见的控件类型 1.CalendarView –日历控件 2. DatePicker –日期选择控件 3.TimePicker –时间选择控件 4.Ch ...

  5. xamarin.android 控件,Android 库控件 - Xamarin | Microsoft Docs

    Xamarin Android 库控件Xamarin.Android Gallery control 03/15/2018 本文内容 Gallery是一种布局小组件,用于显示水平滚动列表中的项,并将当 ...

  6. android控件使用大全,Android常见控件使用详解

    本文实例为大家分享了六种Android常见控件的使用方法,供大家参考,具体内容如下 1.TextView 主要用于界面上显示一段文本信息 2.Button 用于和用户交互的一个按钮控件 //为Butt ...

  7. Android 画廊控件Gallary

    Android 画廊控件Gallary.将图片显示成连续的带状. package com.gallerydemo;import java.lang.reflect.Field; import java ...

  8. Android学习--02(猜猜我的星座App源码+Android常用控件TextView+EditText+Button+ImangeView+DatePicker+App间通信+跳转页面)

    猜猜我的星座App 1 Android常用控件 1.1 TextView控件 1.1.1 简介 1.1.2属性 1.1.3 扩展属性 1.1.4 TextView的使用方法 1.1.5总结 1.2 E ...

  9. Android神奇“控件”-----RemoteViews

    本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 转载请注明 http://blog.csdn.net/wrg_20100512/article/details/53940485 好 ...

最新文章

  1. ATS 5.3.0中自定义日志格式文件logs_xml.config解读
  2. 查看回调几个选项含义_C 盘总是莫名变大?更改这个文件位置至少腾出几个 G !...
  3. C#连接ORACLE数据库乱码问题
  4. 08 域控 架构主机 转移_论无服务器架构的特征
  5. 2020年全球数据中心基础设施收入1650亿美元
  6. java部署容器_Linux容器——Docker(二)之 JavaWeb部署
  7. docker中不能读取带.环境变量的问题
  8. Python 文档学习
  9. 数据导入与预处理-第8章-实战演练-数据分析师岗位分析
  10. eclipse中各图标的含义
  11. 关于Vmware中的Ubuntu不断弹窗Num Lock的问题
  12. 惠普电脑如何安装双系统
  13. 手机浏览网页页面缩放
  14. Oracle 19C 下载和安装
  15. 古剑奇谭网络版服务器正在维护中,古剑奇谭网络版7月19日更新维护公告 古网ol更新了什么...
  16. Shell脚本中 双引号(“”)单引号(‘’)反引号(``)的区别
  17. Java学习:自学or培训?
  18. 第一次机房收费系统总结
  19. 互联网架构为什么要做服务化(Service)
  20. 关于对每种图片格式的理解(学习记录)

热门文章

  1. 采样开关的作用计算机控制,采样过程
  2. 台式计算机更改bios密码,清除DELL Optiplex等系列台式机BIOS密码
  3. 迪士尼滤镜特效——ToonMe
  4. 万物上云时代,中国移动云电脑引领混合办公新潮流
  5. 046医疗项目-模块四:采购单模块—采购单审核(Dao,Service,Action三层)
  6. 关于数学建模中线性规划总结
  7. java中Atomic类之AtomicBoolean
  8. IIS Web服务器的安装与配置
  9. 使用poi解析excel表格,并导入数据
  10. 关于Unity的SteamVR Plugin 2.0版本中SteamVR_Controller不见的问题