CountDownTimer由系统提供的。
倒计时核心代码:
参数:
MyCountDownTimer mc = new MyCountDownTimer(280000, 100)
mc.start();
mc.start();方法开始
mc.cancel();方法结束
<span style="font-size:14px;"> /**
* 继承 CountDownTimer 防范
*
* 重写 父类的方法 onTick() 、 onFinish()
*/
class MyCountDownTimer extends CountDownTimer {
/**
*
* @param millisInFuture
* 表示以毫秒为单位 倒计时的总数
*
* 例如 millisInFuture=1000 表示1秒
*
* @param countDownInterval
* 表示 间隔 多少微秒 调用一次 onTick 方法
*
* 例如: countDownInterval =1000 ; 表示每1000毫秒调用一次onTick()
*
*/
public MyCountDownTimer(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override
public void onFinish() {//结束时调用
}
/**
* 处理时间倒计时进行页面刷新
* @param millisUntilFinished
*/
@Override
public void onTick(long millisUntilFinished) {
int ss = 1000;
int mi = ss * 60;
long minute = millisUntilFinished/ mi;
long second = (millisUntilFinished- minute * mi) / ss;
long milliSecond = millisUntilFinished - minute * mi - second * ss;
String strMinute = minute < 10 ? "0" + minute : "" + minute;//分钟
String strSecond = second < 10 ? "0" + second : "" + second;//秒
String strMilliSecond = milliSecond < 10 ? "0" + milliSecond : "" + milliSecond;//毫秒
strMilliSecond = milliSecond >100 ? strMilliSecond.substring(0,strMilliSecond.length()-1) : "" + strMilliSecond;
tv_status.setText(strMinute + " 分 "+strSecond+"秒"+strMilliSecond);
}
}</span>
完整代码:
public class CommodityBuyView extends LinearLayout {
private TextView tv_goods_desc,tv_status,tv_awardee;
private MyCountDownTimer mc;
private LinearLayout ll_result;
private String awardee;
public CommodityBuyView(Context context) {
this(context, null);
}
public CommodityBuyView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public CommodityBuyView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView(context);
}
/**
* find 控件,初始化
* @param context
*/
private void initView(Context context) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view=inflater.inflate(R.layout.view_commodity_buying,this);
tv_goods_desc= (TextView) view.findViewById(R.id.tv_goods_desc);
tv_status= (TextView) view.findViewById(R.id.tv_status);
tv_awardee= (TextView) view.findViewById(R.id.tv_awardee);
ll_result= (LinearLayout) view.findViewById(R.id.ll_result);
tv_status=(TextView) view.findViewById(R.id.tv_status);
mc = new MyCountDownTimer(280000, 100);
mc.start();
}
/**
* 继承 CountDownTimer 防范
*
* 重写 父类的方法 onTick() 、 onFinish()
*/
class MyCountDownTimer extends CountDownTimer {
/**
*
* @param millisInFuture
* 表示以毫秒为单位 倒计时的总数
*
* 例如 millisInFuture=1000 表示1秒
*
* @param countDownInterval
* 表示 间隔 多少微秒 调用一次 onTick 方法
*
* 例如: countDownInterval =1000 ; 表示每1000毫秒调用一次onTick()
*
*/
public MyCountDownTimer(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override
public void onFinish() {
tv_status.setText("揭晓中....");
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
tv_status.setVisibility(View.GONE);
ll_result.setVisibility(View.VISIBLE);
tv_awardee.setText(awardee);
}
}, 5000);
}
/**
* 处理时间倒计时进行页面刷新
* @param millisUntilFinished
*/
@Override
public void onTick(long millisUntilFinished) {
int ss = 1000;
int mi = ss * 60;
long minute = millisUntilFinished/ mi;
long second = (millisUntilFinished- minute * mi) / ss;
long milliSecond = millisUntilFinished - minute * mi - second * ss;
String strMinute = minute < 10 ? "0" + minute : "" + minute;//分钟
String strSecond = second < 10 ? "0" + second : "" + second;//秒
String strMilliSecond = milliSecond < 10 ? "0" + milliSecond : "" + milliSecond;//毫秒
strMilliSecond = milliSecond >100 ? strMilliSecond.substring(0,strMilliSecond.length()-1) : "" + strMilliSecond;
tv_status.setText(strMinute + " 分 "+strSecond+"秒"+strMilliSecond);
}
}
/**
* 设置获奖人
* @param awardee
*/
public void setAwardee(String awardee){
this.awardee= awardee;
}
}
</pre><pre code_snippet_id="1861900" snippet_file_name="blog_20160901_5_44330" name="code" class="java">xml布局
<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
>
<ImageView
android:id="@+id/iv_goods_img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/goods"
android:layout_marginTop="10dp"
android:scaleType="fitXY"/>
<TextView
android:id="@+id/tv_goods_desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:layout_marginTop="20dp"
android:text="iphone6s 128G (颜色随机)"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
>
<TextView
android:id="@+id/tv_status"
android:layout_width="match_parent"
android:layout_height="40dp"
android:textSize="16sp"
android:textColor="#ffffff"
android:background="@drawable/bg"
android:layout_centerInParent="true"
android:gravity="center"
android:text="揭晓中..."/>
<LinearLayout
android:id="@+id/ll_result"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:gravity="center"
android:visibility="gone"
android:layout_centerInParent="true">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ffffff"
android:padding="5dp"
android:text="中奖"
android:background="@drawable/et_bg"/>
<TextView
android:id="@+id/tv_awardee"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ffffff"
android:layout_marginLeft="10dp"
android:text="bb"/>
</LinearLayout>
</RelativeLayout>
</LinearLayout>