http://pan.baidu.com/s/16Item 下载后将.bmp改名为.zip解压
实现
显示界面包括:
一个TextView,显示计时器当前秒数;
一个start_stop按钮,控制计时器开始、停止计时;
一个reset按钮,重置计时器,并添加一个记录当前秒数记录;
一个List,显示历史记录。
布局
主布局文件设置成Linear_layout,其中包含一个TextView(显示时间),一个子Linear_layout(包含两个控制按钮)和一个ListView(显示记录的历史时间)
ListView布局文件用于定制自己的ListView,包含两个TextView。
widget主要属性包含描述自身显示的id, text, textSize, layout_height, layout_width和描述相对位置和大小的gravity, padding, layout_weight等。
ListView定制
继承ArrayAdapter,重载getView函数
public class TimeListAdapter extends ArrayAdapter<Long> {
public TimeListAdapter (Context context,int textViewResourceId) {
super(context,textViewResourceId);
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
View view = convertView;
if ( view==null ) {
view = LayoutInflater.from( getContext() ).inflate(R.layout.time_row, null);
}
long time = getItem(position);
TextView name = (TextView) view.findViewById(R.id.lap_name);
String taskString = getContext().getResources().getString(R.string.app_name);
name.setText(String.format(taskString,position+1));
TextView lapTime = (TextView)view.findViewById(R.id.lap_time);
lapTime.setText(DateUtils.formatElapsedTime(time));
return view;
}
}
Timer实现
Timer对外提供start/stop/reset控制方法,和isRunning查询方法。内部通过Handler实现定时更新界面TextView当前秒数的功能
public void start() {
mStart = System.currentTimeMillis();
mHandler.removeMessages(0);
mHandler.sendEmptyMessage(0);
}
public long stop() {
mHandler.removeMessages(0);
return mTime;
}
private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
long current = System.currentTimeMillis();
mTime += current - mStart;
mStart = current;
action();
mHandler.sendEmptyMessageDelayed(0,250);
};
};
Main activity实现
Main activity主要在OnCreate时对各个widget初始化(注意:setOnClickListener属于OnClickListener接口)
private void InitViews() {
Button start = (Button)findViewById(R.id.start_stop);
start.<span style="color:#ff0000;">setOnClickListener</span>(this);
Button stop = (Button)findViewById(R.id.reset);
stop.setOnClickListener(this);
if (mTimeListAdapter==null)
{
mTimeListAdapter = new TimeListAdapter(this,0);
ListView list = (ListView) findViewById(R.id.time_list);
<strong><span style="color:#ff0000;">list.setAdapter</span></strong>(mTimeListAdapter);
}
CounterUpdate(0);
}
以及处理点击事件
@Override
public void onClick(View v) {
if ( v.getId()==R.id.start_stop ) {
startButtonOnClick();
}
else if ( v.getId()==R.id.reset ) {
resetButtonClick();
}
ssButtonCaptureUpdate();
}