100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Android 开发第七弹:简易时钟(秒表)

Android 开发第七弹:简易时钟(秒表)

时间:2019-11-01 18:04:00

相关推荐

Android 开发第七弹:简易时钟(秒表)

本文承接,Android 开发第五弹:简易时钟(闹钟) 和 Android 开发第六弹:简易时钟(计时器),这一部分是关于秒表的。

布局

同样是新建一个类(StopWatchView)并扩展自LinearLayout,并将其用作布局。

<.clock.StopWatchViewandroid : id = "@+id/tabStopWatch"android : layout_width = "match_parent"android : layout_height = "match_parent"android : orientation = "vertical"><LinearLayoutandroid : layout_width = "match_parent"android : layout_height = "wrap_content"android : orientation = "horizontal"><TextViewandroid : id = "@+id/tvHour"android : layout_width = "0dp"android : layout_height = "wrap_content"android : layout_weight = "1"android : textAppearance = "?android:attr/textAppearanceLarge" / ><TextViewandroid : text = ":"android : layout_width = "wrap_content"android : layout_height = "wrap_content"android : textAppearance = "?android:attr/textAppearanceLarge" / ><TextViewandroid : id = "@+id/tvMinute"android : layout_width = "0dp"android : layout_height = "wrap_content"android : layout_weight = "1"android : textAppearance = "?android:attr/textAppearanceLarge" / ><TextViewandroid : text = ":"android : layout_width = "wrap_content"android : layout_height = "wrap_content"android : textAppearance = "?android:attr/textAppearanceLarge" / ><TextViewandroid : id = "@+id/tvSecond"android : layout_width = "0dp"android : layout_height = "wrap_content"android : layout_weight = "1"android : textAppearance = "?android:attr/textAppearanceLarge" / ><TextViewandroid : text = "."android : layout_width = "wrap_content"android : layout_height = "wrap_content"android : textAppearance = "?android:attr/textAppearanceLarge" / ><TextViewandroid : id = "@+id/tvMSceond"android : layout_width = "0dp"android : layout_height = "wrap_content"android : layout_weight = "1"android : textAppearance = "?android:attr/textAppearanceLarge" / >< / LinearLayout><ListViewandroid : id = "@+id/lvWatchTimeList"android : layout_width = "match_parent"android : layout_height = "0dp"android : layout_weight = "1">< / ListView><LinearLayoutandroid : orientation = "horizontal"android : layout_width = "match_parent"android : layout_height = "wrap_content"><Buttonandroid : id = "@+id/btnSWStart"android : layout_width = "0dp"android : layout_height = "wrap_content"android : layout_weight = "1"android : text = "@string/start" / ><Buttonandroid : id = "@+id/btnSWPause"android : layout_width = "0dp"android : layout_height = "wrap_content"android : layout_weight = "1"android : text = "@string/pause" / ><Buttonandroid : id = "@+id/btnSWResume"android : layout_width = "0dp"android : layout_height = "wrap_content"android : layout_weight = "1"android : text = "@string/resume" / ><Buttonandroid : id = "@+id/btnSWRecord"android : layout_width = "0dp"android : layout_height = "wrap_content"android : layout_weight = "1"android : text = "@string/record" / ><Buttonandroid : id = "@+id/btnSWReset"android : layout_width = "0dp"android : layout_height = "wrap_content"android : layout_weight = "1"android : text = "@string/reset" / >< / LinearLayout></.clock.StopWatchView>

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

看看这些注释,发现和前面两篇的也没有区别啊,我就不废话直接上代码好了。

@Overrideprotected void onFinishInflate(){super.onFinishInflate();// 为每个相应的TextView控件设置成0tvHour = (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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic void run() {handler.sendEmptyMessage(MSG_WHAT_SHOW_TIME);}};// 开始计时timer.schedule(showTimeTask,200,200);}// 开始private void startTimer(){if(timerTask == null){timerTask = new TimerTask() {@Overridepublic 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;}};};

结束

好吧,这次是真的结束了。

同样的,需要代码就直接评论留邮箱吧。代码会继续更新的,注释也会继续更新……

项目也上传到Github了,欢迎大家贡献代码啊——传送门 。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。