package com.example.lyx2_time;
import java.util.Timer;
import java.util.TimerTask;
import android.content.Context;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
public class StopWatchView extends LinearLayout {
private static final int MSG_WHAT_SHOW_TIME = 1;
private Button btnStart,btnResume,btnLap,btnReset,btnPause;
private TextView tvHour,tvMin,tvSec,tvMSec;
private Timer timer=new Timer();
private TimerTask timerTask=null;
private int tenMSecs = 0;
private ListView lvTimeList;
private ArrayAdapter<String> adapter;
private int hour;
private int min;
private int sec;
private int msec;
public StopWatchView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public StopWatchView(Context context) {
super(context);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
btnStart=(Button) findViewById(R.id.btnSWStart);
btnResume=(Button) findViewById(R.id.btnSWResume);
btnReset=(Button) findViewById(R.id.btnSWReset);
btnLap=(Button) findViewById(R.id.btnSWLap);
btnPause=(Button) findViewById(R.id.btnSWPause);
tvHour=(TextView) findViewById(R.id.timeHour);
tvMin=(TextView) findViewById(R.id.timeMin);
tvSec=(TextView) findViewById(R.id.timeSec);
tvMSec=(TextView) findViewById(R.id.timeMSec);
btnStart.setVisibility(View.VISIBLE);
btnPause.setVisibility(View.GONE);
btnResume.setVisibility(View.GONE);
btnReset.setVisibility(View.GONE);
btnLap.setVisibility(View.GONE);
tvHour.setText("0");
tvMin.setText("0");
tvSec.setText("0");
tvMSec.setText("0");
lvTimeList=(ListView) findViewById(R.id.lvWatchTimeList);
adapter=new ArrayAdapter<String>(getContext(),android.R.layout.simple_list_item_1);
lvTimeList.setAdapter(adapter);
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startTimer();
btnStart.setVisibility(View.GONE);
btnPause.setVisibility(View.VISIBLE);
btnResume.setVisibility(View.GONE);
btnReset.setVisibility(View.VISIBLE);
btnLap.setVisibility(View.VISIBLE);
}
});
btnPause.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopTimer();
btnStart.setVisibility(View.GONE);
btnPause.setVisibility(View.GONE);
btnResume.setVisibility(View.VISIBLE);
btnReset.setVisibility(View.VISIBLE);
btnLap.setVisibility(View.GONE);
}
});
btnResume.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startTimer();
btnStart.setVisibility(View.GONE);
btnPause.setVisibility(View.VISIBLE);
btnResume.setVisibility(View.GONE);
btnReset.setVisibility(View.VISIBLE);
btnLap.setVisibility(View.VISIBLE);
}
});
btnReset.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tenMSecs = 0;
stopTimer();
adapter.clear();
tvHour.setText("0");
tvMin.setText("0");
tvSec.setText("0");
tvMSec.setText("0");
btnStart.setVisibility(View.VISIBLE);
btnPause.setVisibility(View.GONE);
btnResume.setVisibility(View.GONE);
btnReset.setVisibility(View.GONE);
btnLap.setVisibility(View.GONE);
}
});
btnLap.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
adapter.insert(String.format("%d:%d:%d.%d", hour,min,sec,msec), 0);
}
});
}
private void startTimer(){
if(timerTask==null){
//timerTask在另外一个线程,所以必须用handle来传递数据
timerTask=new TimerTask() {
@Override
public void run() {
tenMSecs++;
handler.sendEmptyMessage(MSG_WHAT_SHOW_TIME);
}
};
timer.schedule(timerTask, 10,10);
}
}
private void stopTimer(){
if(timerTask!=null){
timerTask.cancel();
timerTask=null;
}
}
private Handler handler =new Handler(){
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case MSG_WHAT_SHOW_TIME:
hour=tenMSecs/100/60/60;
min=(tenMSecs/100/60)%60;
sec=(tenMSecs/100)%60;
msec=tenMSecs%100;
tvHour.setText(hour+" ");
tvMin.setText(min+" ");
tvSec.setText(sec+" ");
tvMSec.setText(msec+" ");
break;
default:
break;
}
};
};
public void onDestroy() {
timer.cancel();
}
}
import java.util.Timer;
import java.util.TimerTask;
import android.content.Context;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
public class StopWatchView extends LinearLayout {
private static final int MSG_WHAT_SHOW_TIME = 1;
private Button btnStart,btnResume,btnLap,btnReset,btnPause;
private TextView tvHour,tvMin,tvSec,tvMSec;
private Timer timer=new Timer();
private TimerTask timerTask=null;
private int tenMSecs = 0;
private ListView lvTimeList;
private ArrayAdapter<String> adapter;
private int hour;
private int min;
private int sec;
private int msec;
public StopWatchView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public StopWatchView(Context context) {
super(context);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
btnStart=(Button) findViewById(R.id.btnSWStart);
btnResume=(Button) findViewById(R.id.btnSWResume);
btnReset=(Button) findViewById(R.id.btnSWReset);
btnLap=(Button) findViewById(R.id.btnSWLap);
btnPause=(Button) findViewById(R.id.btnSWPause);
tvHour=(TextView) findViewById(R.id.timeHour);
tvMin=(TextView) findViewById(R.id.timeMin);
tvSec=(TextView) findViewById(R.id.timeSec);
tvMSec=(TextView) findViewById(R.id.timeMSec);
btnStart.setVisibility(View.VISIBLE);
btnPause.setVisibility(View.GONE);
btnResume.setVisibility(View.GONE);
btnReset.setVisibility(View.GONE);
btnLap.setVisibility(View.GONE);
tvHour.setText("0");
tvMin.setText("0");
tvSec.setText("0");
tvMSec.setText("0");
lvTimeList=(ListView) findViewById(R.id.lvWatchTimeList);
adapter=new ArrayAdapter<String>(getContext(),android.R.layout.simple_list_item_1);
lvTimeList.setAdapter(adapter);
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startTimer();
btnStart.setVisibility(View.GONE);
btnPause.setVisibility(View.VISIBLE);
btnResume.setVisibility(View.GONE);
btnReset.setVisibility(View.VISIBLE);
btnLap.setVisibility(View.VISIBLE);
}
});
btnPause.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopTimer();
btnStart.setVisibility(View.GONE);
btnPause.setVisibility(View.GONE);
btnResume.setVisibility(View.VISIBLE);
btnReset.setVisibility(View.VISIBLE);
btnLap.setVisibility(View.GONE);
}
});
btnResume.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startTimer();
btnStart.setVisibility(View.GONE);
btnPause.setVisibility(View.VISIBLE);
btnResume.setVisibility(View.GONE);
btnReset.setVisibility(View.VISIBLE);
btnLap.setVisibility(View.VISIBLE);
}
});
btnReset.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tenMSecs = 0;
stopTimer();
adapter.clear();
tvHour.setText("0");
tvMin.setText("0");
tvSec.setText("0");
tvMSec.setText("0");
btnStart.setVisibility(View.VISIBLE);
btnPause.setVisibility(View.GONE);
btnResume.setVisibility(View.GONE);
btnReset.setVisibility(View.GONE);
btnLap.setVisibility(View.GONE);
}
});
btnLap.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
adapter.insert(String.format("%d:%d:%d.%d", hour,min,sec,msec), 0);
}
});
}
private void startTimer(){
if(timerTask==null){
//timerTask在另外一个线程,所以必须用handle来传递数据
timerTask=new TimerTask() {
@Override
public void run() {
tenMSecs++;
handler.sendEmptyMessage(MSG_WHAT_SHOW_TIME);
}
};
timer.schedule(timerTask, 10,10);
}
}
private void stopTimer(){
if(timerTask!=null){
timerTask.cancel();
timerTask=null;
}
}
private Handler handler =new Handler(){
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case MSG_WHAT_SHOW_TIME:
hour=tenMSecs/100/60/60;
min=(tenMSecs/100/60)%60;
sec=(tenMSecs/100)%60;
msec=tenMSecs%100;
tvHour.setText(hour+" ");
tvMin.setText(min+" ");
tvSec.setText(sec+" ");
tvMSec.setText(msec+" ");
break;
default:
break;
}
};
};
public void onDestroy() {
timer.cancel();
}
}