效果如下:
剩余 00:59:21
package com.bihu.advertiserapp.widgets;
import android.annotation.TargetApi;
import android.content.Context;
import android.icu.text.SimpleDateFormat;
import android.os.Handler;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import java.util.HashMap;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
/** 倒计时控件
* Created by huqiang2 on 2016/12/7.
*/
public class CountdownTextView extends TextView {
long mSeconds;
String mStrFormat;
Map mTimerMap;
TimerTask mTimerTask;
final int what_count_down_tick = 1;
String TAG = "CountdownTextView";
public CountdownTextView(Context context) {
super(context);
}
public CountdownTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CountdownTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@TargetApi(21)
public CountdownTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
/**
*
* @param format 例如:剩余%s
* @param seconds
*/
public void init(String format,long seconds){
mTimerMap = new HashMap<>();
if(!TextUtils.isEmpty(format)){
mStrFormat = format;
}
mSeconds = seconds; //设置总共的秒数
mTimerTask = new TimerTask() {
@Override
public void run() {
if(mSeconds > 0){
mSeconds --;
mHandler.sendEmptyMessage(what_count_down_tick);
}
}
};
}
public void start(int position){
if(mTimerMap.get(position) == null){
Timer timer = new Timer();
mTimerMap.put(position,timer);
mTimerMap.get(position).schedule(mTimerTask,0,1000);
}
}
private Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what){
case what_count_down_tick:
if(mSeconds <= 0){
setText(String.format(mStrFormat,"00:00:00"));
}else {
Log.e(TAG,"mSeconds="+mSeconds+"#what_count_down_tick:"+second2TimeSecond(mSeconds)+"#"+String.format(mStrFormat,second2TimeSecond(mSeconds)));
setText(mStrFormat== null ?second2TimeSecond(mSeconds):String.format(mStrFormat,second2TimeSecond(mSeconds)));
}
break;
}
}
};
@Override
public void removeOnLayoutChangeListener(OnLayoutChangeListener listener) {
Log.e(TAG,"removeOnLayoutChangeListener");
super.removeOnLayoutChangeListener(listener);
}
@Override
public void removeOnAttachStateChangeListener(OnAttachStateChangeListener listener) {
Log.e(TAG,"removeOnAttachStateChangeListener");
super.removeOnAttachStateChangeListener(listener);
}
/**
* 转化为 hh:mm:ss 格式
* @param second
* @return
*/
private String second2TimeSecond(long second) {
long hours = second / 3600;
long minutes = (second%3600)/ 60;
long seconds = second % 60;
String hourString = "";
String minuteString = "";
String secondString = "";
if(hours < 10){
hourString = "0";
if(hours == 0){
hourString += "0";
}else{
hourString += String.valueOf(hours);
}
}else{
hourString = String.valueOf(hours);
}
if (minutes < 10) {
minuteString = "0";
if (minutes == 0) {
minuteString += "0";
}else {
minuteString += String.valueOf(minutes);
}
}else{
minuteString = String.valueOf(minutes);
}
if(seconds < 10){
secondString = "0";
if (seconds == 0) {
secondString += "0";
}else {
secondString += String.valueOf(seconds);
}
}else {
secondString = String.valueOf(seconds);
}
return hourString + ":" + minuteString+":"+secondString;
}
}
android自定义倒计时控件示例
这篇文章主要介绍了Android秒杀倒计时自定义TextView示例,大家参考使用吧 自定义TextView控件TimeTextView代码: 复制代码 代码如下: import android.co ...
android中倒计时控件CountDownTimer分析
android中倒计时控件CountDownTimer分析 1 示例代码 new CountDownTimer(10000, 1000) { public void onTick(long milli ...
Android自定义日历控件(继承系统控件实现)
Android自定义日历控件(继承系统控件实现) 主要步骤 编写布局 继承LinearLayout设置子控件 设置数据 继承TextView实现有圆圈背景的TextView 添加Attribute 添 ...
Android自定义组合控件详细示例 (附完整源码)
在我们平时的Android开发中,有时候原生的控件无法满足我们的需求,或者经常用到几个控件组合在一起来使用.这个时候,我们就可以根据自己的需求创建自定义的控件了,一般通过继承View或其子类来实现. ...
014 Android 自定义组合控件
1.需求介绍 将已经编写好的布局文件,抽取到一个类中去做管理,下次还需要使用类似布局时,直接使用该组合控件的对象. 优点:可复用. 例如要重复利用以下布局:
Android自定义用户控件简单范例(二)
对于完全由后台定制的控件,并不是很方便其他人的使用,因为我们常常需要看到控件放到xml界面上的效果,并根据效果进行布局的调整,这就需要一个更加标准的控件制作流程: 我们的自定义控件和其他的控件一样,应 ...
(转)android自定义组合控件