Android studio如何编写秒表程序?
1、新建一个类(StopWatchView)并扩展自LinearLayout,并将其用作布局。
<myapplication.nomasp.com.clock.stopwatchview :="" android="" id="@+id/tabStopWatch" layout_height="match_parent" layout_width="match_parent" orientation="vertical">
<linearlayout :="" android="" layout_height="wrap_content" layout_width="match_parent" orientation="horizontal">
<textview :="" android="" id="@+id/tvHour" layout_height="wrap_content" layout_weight="1" layout_width="0dp" textappearance="?android:attr/textAppearanceLarge">
<textview :="" android="" layout_height="wrap_content" layout_width="wrap_content" text=":" textappearance="?android:attr/textAppearanceLarge">
<textview :="" android="" id="@+id/tvMinute" layout_height="wrap_content" layout_weight="1" layout_width="0dp" textappearance="?android:attr/textAppearanceLarge">
<textview :="" android="" layout_height="wrap_content" layout_width="wrap_content" text=":" textappearance="?android:attr/textAppearanceLarge">
<textview :="" android="" id="@+id/tvSecond" layout_height="wrap_content" layout_weight="1" layout_width="0dp" textappearance="?android:attr/textAppearanceLarge">
<textview :="" android="" layout_height="wrap_content" layout_width="wrap_content" text="." textappearance="?android:attr/textAppearanceLarge">
<textview :="" android="" id="@+id/tvMSceond" layout_height="wrap_content" layout_weight="1" layout_width="0dp" textappearance="?android:attr/textAppearanceLarge">
< / LinearLayout>
<listview :="" android="" id="@+id/lvWatchTimeList" layout_height="0dp" layout_weight="1" layout_width="match_parent">
< / ListView>
<linearlayout :="" android="" layout_height="wrap_content" layout_width="match_parent" orientation="horizontal"><button :="" android="" id="@+id/btnSWStart" layout_height="wrap_content" layout_weight="1" layout_width="0dp" text="@string/start"></button><button :="" android="" id="@+id/btnSWPause" layout_height="wrap_content" layout_weight="1" layout_width="0dp" text="@string/pause"></button><button :="" android="" id="@+id/btnSWResume" layout_height="wrap_content" layout_weight="1" layout_width="0dp" text="@string/resume"></button><button :="" android="" id="@+id/btnSWRecord" layout_height="wrap_content" layout_weight="1" layout_width="0dp" text="@string/record"></button></linearlayout></listview></textview></textview></textview></textview></textview></textview></textview></linearlayout></myapplication.nomasp.com.clock.stopwatchview>
<button :="" android="" id="@+id/btnSWReset" layout_height="wrap_content" layout_weight="1" layout_width="0dp" text="@string/reset">
</button>
2、StopWatchView
同样是一开始要定义好的这些balabala的东西:
private int tenMSecs = 0;
private Timer timer = new Timer();
private TimerTask timerTask = null;
private TimerTask showTimeTask = null;
private TextView tvHour, tvMinute, tvSecond, tvMSecond;
private Button btnSWStart, btnSWResume, btnSWReset, btnSWPause, btnSWRecord;
private ListView lvWatchTimeList;
private ArrayAdapter<string> adapter;
private static final int MSG_WHAT_SHOW_TIME = 1;
public StopWatchView(Context context) {
super(context);
}
public StopWatchView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public StopWatchView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
3、@Override
protected void onFinishInflate(){
super.onFinishInflate();
// 为每个相应的TextView控件设置成0
tvHour = (TextView)findViewById(R.id.tvHour);
tvHour.setText(0);
tvMinute = (TextView)findViewById(R.id.tvMinute);
tvMinute.setText(0);
tvSecond = (TextView)findViewById(R.id.tvSecond);
tvSecond.setText(0);
tvMSecond = (TextView)findViewById(R.id.tvMSceond);
tvMSecond.setText(0);
// 为每个Button设置监听事件
btnSWRecord = (Button)findViewById(R.id.btnSWRecord);
btnSWRecord.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
adapter.insert(String.format(%d:%d:%d.%d,
tenMSecs/100/60/60,
tenMSecs/100/60%60,
tenMSecs/100%60,
tenMSecs%100),
0);
}
});
btnSWPause = (Button)findViewById(R.id.btnSWPause);
btnSWPause.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 停止
stopTimer();
btnSWPause.setVisibility(View.GONE);
btnSWResume.setVisibility(View.VISIBLE);
btnSWReset.setVisibility(View.VISIBLE);
btnSWRecord.setVisibility(View.GONE);
}
});
btnSWReset = (Button)findViewById(R.id.btnSWReset);
btnSWReset.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 停止
stopTimer();
tenMSecs = 0;
adapter.clear();
btnSWStart.setVisibility(View.VISIBLE);
btnSWPause.setVisibility(View.GONE);
btnSWReset.setVisibility(View.GONE);
btnSWRecord.setVisibility(View.GONE);
btnSWResume.setVisibility(View.GONE);
}
});
btnSWResume = (Button)findViewById(R.id.btnSWResume);
btnSWResume.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 开始
startTimer();
btnSWResume.setVisibility(View.GONE);
btnSWReset.setVisibility(View.GONE);
btnSWRecord.setVisibility(View.VISIBLE);
btnSWPause.setVisibility(View.VISIBLE);
}
});
btnSWStart = (Button)findViewById(R.id.btnSWStart);
btnSWStart.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 开始
startTimer();
btnSWStart.setVisibility(View.GONE);
btnSWPause.setVisibility(View.VISIBLE);
btnSWRecord.setVisibility(View.VISIBLE);
}
});
btnSWRecord.setVisibility(View.GONE);
btnSWPause.setVisibility(View.GONE);
btnSWReset.setVisibility(View.GONE);
btnSWResume.setVisibility(View.GONE);
// 将适配器添加到列表
lvWatchTimeList = (ListView)findViewById(R.id.lvWatchTimeList);
adapter = new ArrayAdapter<string>(getContext(),
android.R.layout.simple_list_item_1);
lvWatchTimeList.setAdapter(adapter);
// 向Handler发送消息
showTimeTask = new TimerTask() {
@Override
public void run() {
handler.sendEmptyMessage(MSG_WHAT_SHOW_TIME);
}
};
// 开始计时
timer.schedule(showTimeTask,200,200);
}
// 开始
private void startTimer(){
if(timerTask == null){
timerTask = new TimerTask() {
@Override
public void run() {
tenMSecs++;
}
};
timer.schedule(timerTask,10,10);
}
}
// 结束
private void stopTimer(){
if(timerTask != null){
timerTask.cancel();
timerTask = null;
}
}
// 取消计时
public void onDestory(){
timer.cancel();
}
private Handler handler = new Handler(){
public void handleMessage(Message msg){
switch (msg.what){
// 如果消息匹配,则将相应时间计算后显示在相应TextView上
case MSG_WHAT_SHOW_TIME:
tvHour.setText(tenMSecs/100/60/60+);
tvMinute.setText(tenMSecs/100/60%60+);
tvSecond.setText(tenMSecs/100%60+);
tvMSecond.setText(tenMSecs%100+);
break;
default:
break;
}
};
};