package cn.androidy.thinking.views;
import android.content.Context;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import butterknife.Bind;
import butterknife.ButterKnife;
import cn.androidy.listgrid.control.ITickListener;
import cn.androidy.listgrid.control.TickTimer;
import cn.androidy.thinking.R;
public class TimerView extends LinearLayout implements ITickListener {
protected String strHour;
protected String strMin;
protected String strSec;
private long endTime = 0;
public Handler handler = new Handler();
@Bind(R.id.tvHour)
TextView tvHour;
@Bind(R.id.tvMin)
TextView tvMin;
@Bind(R.id.tvSec)
TextView tvSec;
@Bind(R.id.tvStart)
TextView tvStart;
public TimerView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public TimerView(Context context) {
super(context);
init();
}
private void init() {
LayoutInflater inflater = LayoutInflater.from(getContext());
inflater.inflate(R.layout.timer_layout, this);
ButterKnife.bind(this, this);
}
public void onHourRemain(int hour) {
strHour = String.format("%02d", hour);
if (tvHour != null) {
tvHour.setText(strHour);
}
};
public void onMinRemain(int min) {
strMin = String.format("%02d", min);
if (tvMin != null) {
tvMin.setText(strMin);
}
};
public void onSecRemain(int sec) {
strSec = String.format("%02d", sec);
if (tvSec != null) {
tvSec.setText(strSec);
}
}
@Override
public void onTick() {
long endTime = getEndTime();
long currentTimeMillis = System.currentTimeMillis();
long remain = endTime - currentTimeMillis;
if (remain > 0) {
dispatchRemainTime(endTime - currentTimeMillis);
}
}
protected void dispatchRemainTime(long timeRemaining) {
final int hour = (int) (timeRemaining / TickTimer.HOUR_MILLIS);// 小时数
final int min = (int) ((timeRemaining - TickTimer.HOUR_MILLIS * hour) / TickTimer.MIN_MILLIS);
final int sec = (int) ((timeRemaining - TickTimer.HOUR_MILLIS * hour - TickTimer.MIN_MILLIS * min) / TickTimer.SEC_MILLIS);
handler.post(new Runnable() {
@Override
public void run() {
onHourRemain(hour);
onMinRemain(min);
onSecRemain(sec);
}
});
}
public long getEndTime() {
return endTime;
}
public void setEndTime(long endTime) {
this.endTime = endTime;
}
public void hideStartText() {
tvStart.setVisibility(View.INVISIBLE);
}
}