Android UI基础教程【2】 TimerTacker源码

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();
	}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值