自定义类
包com.xiao.countdownboard;
进口java.util.Timer中的中;
进口java.util.TimerTask中的中;
进口android.content.Context;
进口android.os.Handler;
进口android.os.Message;
进口android.util.AttributeSet;
进口android.view.LayoutInflater;
进口android.view.View;
进口android.widget.LinearLayout;
进口android.widget.TextView;
公共类RushBuyCountDownTimerView扩展的LinearLayout中{
私人的TextView的tv_hour_decade;
私人的TextView的tv_hour_unit;
私人的TextView的tv_min_decade;
私人的TextView的tv_min_unit;
私人的TextView的tv_sec_decade;
私人的TextView的tv_sec_unit;
私人上下文的背景下;
私人的TextView的timer_state;
私人诠释hour_decade;
私人诠释.MIN_UNIT;
私人诠释min_decade;
私人诠释min_unit;
私人诠释sec_decade;
私人诠释sec_unit;
私人定时器定时;
私人StopTimer STIMER;
私人处理程序处理程序=新的处理程序(){
公共无效的的handleMessage(信息MSG){
countDown方法方法();
};
};
公共RushBuyCountDownTimerView(上下文的背景下,ATTRS的AttributeSet中){
超(背景下,ATTRS);
this.context =背景;
LayoutInflater充气=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
查看查看= inflater.inflate(R.layout.shop_coupon_timer,这一点);
tv_hour_decade =(TextView的中)view.findViewById(R.id.tv_hour_decade);
tv_hour_unit =(TextView的中)view.findViewById(R.id.tv_hour_unit);
tv_min_decade =(TextView的中)view.findViewById(R.id.tv_min_decade);
tv_min_unit =(TextView的中)view.findViewById(R.id.tv_min_unit);
tv_sec_decade =(TextView的中)view.findViewById(R.id.tv_sec_decade);
tv_sec_unit =(TextView的中)view.findViewById(R.id.tv_sec_unit);
timer_state =(TextView的中)view.findViewById(R.id.timer_state);
}
公共无效的的setState(INT ID){
timer_state.setBackground(getResources()getDrawable(ID));
}
/ **
*
* @描述:开始计时
* @参数
* @返回无效
* @throws
* /
公共无效启动(){
如果(定时器== NULL){
定时器=新的定时器();
timer.schedule(新的TimerTask的(){
@Override
公共无效的运行(){
handler.sendEmptyMessage(0);
}
},0,1000);
}
}
公共无效setCompleteListener(StopTimer STIMER){
this.sTimer = STIMER;
};
/ **
*
* @描述:停止计时
* @参数
* @返回无效
* @throws
* /
公共无效停止(){
如果(定时器!= NULL){
timer.cancel();
定时器= NULL;
sTimer.complete();
}
}
/ **
* @throws异常
*
* @描述:设置倒计时的时长
* @参数
* @返回无效
* @throws
* /
公共无效的的setTime(INT小时,INT分钟,INT秒){
如果(小时> = 60 ||分钟> = 60 ||秒> = 60 ||小时<0 ||分钟<0 ||秒<0){
抛出新的RuntimeException的(“时间格式错误,请检查你的代码”);
}
hour_decade =小时/ 10;
.MIN_UNIT =小时 - hour_decade * 10;
min_decade =分钟/ 10;
min_unit =分钟 - min_decade * 10;
sec_decade =秒/ 10;
sec_unit =秒 - sec_decade * 10;
tv_hour_decade.setText(hour_decade +“”);
tv_hour_unit.setText(.MIN_UNIT +“”);
tv_min_decade.setText(min_decade +“”);
tv_min_unit.setText(min_unit +“”);
tv_sec_decade.setText(sec_decade +“”);
tv_sec_unit.setText(sec_unit +“”);
}
/ **
*
* @描述:倒计时
* @参数
* @返回布尔
* @throws
* /
私人无效countDown方法方法(){
如果(isCarry4Unit(tv_sec_unit)){
如果(isCarry4Decade(tv_sec_decade)){
如果(isCarry4Unit(tv_min_unit)){
如果(isCarry4Decade(tv_min_decade)){
如果(isCarry4Unit(tv_hour_unit)){
如果(isCarry4Decade(tv_hour_decade)){
停止();
}
}
}
}
}
}
}
/ **
*
* @描述:变化十位,并判断是否需要进位
* @参数
* @返回布尔
* @throws
* /
私人布尔isCarry4Decade(TextView中的电视){
INT时间= Integer.valueOf(tv.getText()的的toString());
时间=时间 - 1;
如果(时间<0){
时间= 5;
tv.setText(时间+“”);
返回真;
} {其他
tv.setText(时间+“”);
返回FALSE;
}
}
/ **
*
* @描述:变化个位,并判断是否需要进位
* @参数
* @返回布尔
* @throws
* /
私人布尔isCarry4Unit(TextView中的电视){
INT时间= Integer.valueOf(tv.getText()的的toString());
时间=时间 - 1;
如果(时间<0){
时间= 9;
tv.setText(时间+“”);
返回真;
} {其他
tv.setText(时间+“”);
返回FALSE;
}
}
}
自定义
<?XML版本=“1.0”编码=“UTF-8”?>
<RelativeLayout的的XMLNS:安卓=“HTT号码://schemas.android.com/apk/res/android”
机器人:layout_width =“WRAP_CONTENT”
机器人:layout_height =“WRAP_CONTENT”
机器人:方向=“垂直”>
<TextView中的
机器人:ID =“@ + ID / timer_state”
机器人:layout_width =“WRAP_CONTENT”
机器人:layout_height =“WRAP_CONTENT”
机器人:layout_alignParentTop =“真”
机器人:layout_centerHorizo ntal =“真”
机器人:背景=“@可绘制/ shop_timer_dao”/>
<的的LinearLayout
机器人:layout_width =“WRAP_CONTENT”
机器人:layout_height =“WRAP_CONTENT”
机器人:layout_below =“@ ID / timer_state”
机器人:layout_marginTop =“ - 1DP”
机器人:背景=“@可绘制/ shop_coupon_bg”
机器人:方向=“横向”>
<的的LinearLayout
机器人:layout_width =“WRAP_CONTENT”
机器人:layout_height =“WRAP_CONTENT”
机器人:layout_weight =“1”
机器人:方向=“垂直”
机器人:填充=“3DP”>
<TextView中的
机器人:layout_width =“WRAP_CONTENT”
机器人:layout_height =“WRAP_CONTENT”
机器人:文本=“剩”
机器人:文字颜色=“@色/白”
机器人:TEXTSIZE =“9SP”/>
<TextView中的
机器人:layout_width =“WRAP_CONTENT”
机器人:layout_height =“WRAP_CONTENT”
机器人:文本=“余”
机器人:文字颜色=“@色/白”
机器人:TEXTSIZE =“9SP”/>
</ LinearLayout中中>
<TextView中的
机器人:ID =“@ + ID / tv_hour_decade”
风格=“@风格/ CouponTimerViewStyle”
机器人:layout_gravity =“center_vertical”
机器人:layout_marginBottom =“4DP”
机器人:layout_marginRight =“2DP”
机器人:layout_marginTop =“4DP”
机器人:背景=“@可绘制/ shop_coupon_text_bg”
机器人:填充=“3DP”/>
<TextView中的
机器人:ID =“@ + ID / tv_hour_unit”
风格=“@风格/ CouponTimerViewStyle”
机器人:layout_gravity =“center_vertical”
机器人:layout_marginBottom =“4DP”
机器人:layout_marginTop =“4DP”
机器人:背景=“@可绘制/ shop_coupon_text_bg”
机器人:填充=“3DP”/>
<TextView中的
机器人:layout_width =“WRAP_CONTENT”
机器人:layout_height =“WRAP_CONTENT”
机器人:layout_gravity =“center_vertical”
机器人:填充=“2DP”
机器人:文本=“:”
机器人:文字颜色=“@色/白”/>
<TextView中的
机器人:ID =“@ + ID / tv_min_decade”
风格=“@风格/ CouponTimerViewStyle”
机器人:layout_gravity =“center_vertical”
机器人:layout_marginBottom =“4DP”
机器人:layout_marginRight =“2DP”
机器人:layout_marginTop =“4DP”
机器人:背景=“@可绘制/ shop_coupon_text_bg”
机器人:填充=“3DP”/>
<TextView中的
机器人:ID =“@ + ID / tv_min_unit”
风格=“@风格/ CouponTimerViewStyle”
机器人:layout_gravity =“center_vertical”
机器人:layout_marginBottom =“4DP”
机器人:layout_marginTop =“4DP”
机器人:背景=“@可绘制/ shop_coupon_text_bg”
机器人:填充=“3DP”/>
<TextView中的
机器人:layout_width =“WRAP_CONTENT”
机器人:layout_height =“WRAP_CONTENT”
机器人:layout_gravity =“center_vertical”
机器人:填充=“2DP”
机器人:文本=“:”
机器人:文字颜色=“@色/白”/>
<TextView中的
机器人:ID =“@ + ID / tv_sec_decade”
风格=“@风格/ CouponTimerViewStyle”
机器人:layout_gravity =“center_vertical”
机器人:layout_marginBottom =“4DP”
机器人:layout_marginRight =“2DP”
机器人:layout_marginTop =“4DP”
机器人:背景=“@可绘制/ shop_coupon_text_bg”
机器人:填充=“3DP”/>
<TextView中的
机器人:ID =“@ + ID / tv_sec_unit”
风格=“@风格/ CouponTimerViewStyle”
机器人:layout_gravity =“center_vertical”
机器人:layout_marginBottom =“4DP”
机器人:layout_marginRight =“5DP”
机器人:layout_marginTop =“4DP”
机器人:背景=“@可绘制/ shop_coupon_text_bg”
机器人:填充=“3DP”/>
</ LinearLayout中中>
</ RelativeLayout的的>
使用代码
包com.xiao.countdownboard;
进口android.os.Bundle;
进口android.app.Activity;
进口android.view.Menu;
公共类MainActivity延伸活动{
RushBuyCountDownTimerView seckillView;
@Override
保护无效的的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的的setContentView(R.layout.activity_main);
seckillView =(RushBuyCountDownTimerView)findViewById(R.id.shoptimer);
INT []日期= getHourMinSec(10000);
seckillView.setTime(日期[0]日期[1],日[2]);
seckillView.start();
}
//获得格式为时分秒
公共静态INT [] getHourMinSec(长T){
INT []日期=新INT [3];
日期[0] = Integer.valueOf(T / 3600 +“”);
日期[1] = Integer.valueOf((T - 日期[0] * 3600)/ 60 +“”);
日期[2] = Integer.valueOf(T%60 +“”);
返回日期;
}
}
源码http://download.youkuaiyun.com/detail/u010775074/9014503