练手小项目(3)倒计时
来源:互联网 发布:淘宝卖家如何开通直播 编辑:程序博客网 时间:2024/05/21 17:57
正好想复习线程,就整个例子,练习练习 先看布局,我在解释思路
一个Edittext 输入倒计时间
一个button 获取用户输入时间 显示在textview
一个textview 显示 倒计的时间
开始计时是一个button 主要开启一个timertask 更新textview的时间
停止即使也是一个button 主要停止timertask
<------------------------------------------------------------------------布局------------------------------------------------------------------------->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="match_parent" > <EditText android:id="@+id/inputtime" android:layout_width="fill_parent" android:layout_height="wrap_content" android:ems="10" > <requestFocus /> </EditText> <Button android:id="@+id/gettime" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="获取倒计时时间" /> <TextView android:id="@+id/time" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/starttime" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="开始计时" /> <Button android:id="@+id/stoptime" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="停止计时" /></LinearLayout><------------------------------------------------------------------------布局------------------------------------------------------------------------->
再想想 用户输入时间,然后button获取时间 然后显示在textview很好实现 ,怎么让他一秒秒减少呢,这时候timer就出现了
//Timer是一种定时器工具,用来在一个后台线程计划执行指定任务。它可以计划执行一个任务一次或反复多次。
//TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务。
这个时候 减少时间解决了,怎么更新UI呢,这时候handler出现了,他是安卓的消息机制能解决线程无法更新UI的问题只需要发送一个msg
————————————————————————————————————java代码——————————————————————————————————
1.先初始化控件 并设置点击事件
/** * 初始化控件 */ private void initView(){ inputtime = (EditText) findViewById(R.id.inputtime); getTime = (Button) findViewById(R.id.gettime); startTime = (Button) findViewById(R.id.starttime); stopTime = (Button) findViewById(R.id.stoptime); time = (TextView) findViewById(R.id.time); getTime.setOnClickListener(this); startTime.setOnClickListener(this); stopTime.setOnClickListener(this); }
-----------------------------------------------------------------------
2.点击事件的处理
@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.gettime://从用户输入的时间设置到textviewtime.setText(inputtime.getText().toString());//int转成Stringi = Integer.parseInt(inputtime.getText().toString());break;case R.id.starttime://开始计时startTime();break;case R.id.stoptime://停止计时stopTime();break;}}--------------------------------------------------------------------计时的业务 已经UI得更新
3.
public void startTime(){//1.获得timer类实例timer = new Timer();//2.获得TimerTask类实例task = new TimerTask() {//3.run方法执行线程任务@Overridepublic void run() {//4.用户输入的事件 开始自减i--;//5.启用安卓消息机制进行UI更新 Message message = mHandler.obtainMessage();message.arg1 = i;//6.发送消息给handlermessge进行操作mHandler.sendMessage(message);}};//7.等待1秒以后开始执行timer.schedule(task, 1000);}
-------------------------------------------------------handler代码-----------------------------------------------------------
private Handler mHandler = new Handler(){public void handleMessage(Message msg) {//8.UI更新time.setText(msg.arg1+"");//9.继续开始计时,等待结束startTime();};};
----------------------------------------------------------timer 停止
public void stopTime(){timer.cancel();}
----------------------------------------------------------End
package com.jikexueyuan.counttime;import java.util.Timer;import java.util.TimerTask;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;public class MainActivity extends Activity implements OnClickListener{private EditText inputtime;private Button getTime,startTime,stopTime;private TextView time;private int i = 0;//Timer是一种定时器工具,用来在一个后台线程计划执行指定任务。//它可以计划执行一个任务一次或反复多次。private Timer timer = null;//TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务。private TimerTask task = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化控件 initView(); } /** * 初始化控件 */ private void initView(){ inputtime = (EditText) findViewById(R.id.inputtime); getTime = (Button) findViewById(R.id.gettime); startTime = (Button) findViewById(R.id.starttime); stopTime = (Button) findViewById(R.id.stoptime); time = (TextView) findViewById(R.id.time); getTime.setOnClickListener(this); startTime.setOnClickListener(this); stopTime.setOnClickListener(this); }@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.gettime://从用户输入的时间设置到textviewtime.setText(inputtime.getText().toString());//int转成Stringi = Integer.parseInt(inputtime.getText().toString());break;case R.id.starttime://开始计时startTime();break;case R.id.stoptime://停止计时stopTime();break;}}private Handler mHandler = new Handler(){public void handleMessage(Message msg) {//8.UI更新time.setText(msg.arg1+"");//9.继续开始计时,等待结束startTime();};};public void startTime(){//1.获得timer类实例timer = new Timer();//2.获得TimerTask类实例task = new TimerTask() {//3.run方法执行线程任务@Overridepublic void run() {//4.用户输入的事件 开始自减i--;//5.启用安卓消息机制进行UI更新 Message message = mHandler.obtainMessage();message.arg1 = i;//6.发送消息给handlermessge进行操作mHandler.sendMessage(message);}};//7.等待1秒以后开始执行timer.schedule(task, 1000);}public void stopTime(){timer.cancel();} }
--------------------------------------------------------------------------------
0 0
- 练手小项目(3)倒计时
- 练手小项目之新闻类(3)添加广告栏
- 练手小项目(二)计算器
- (练手小项目)销售管理系
- 收集练手小项目
- 练手小项目
- 小项目练手-Day1
- python练手小项目
- Android练手小项目
- 练手小项目(2)-生活小助手--身份证查询
- 练手小项目__vivi移植
- [转]程序员练手小项目
- 程序猿练手小项目
- 练手项目的小问题
- 练手小项目(二):计算器(说明文档)
- 练手小项目之新闻类(1)联网
- 练手小项目(4)安全卫士——黑名单拦截
- 练手小项目(5)安全卫士_电源管理
- 在Xcode中使用Git进行源码版本控制
- matlab中的转字符
- js学习笔记
- java 数据结构源码--线段树
- 一些IE与标准dom比较的例子
- 练手小项目(3)倒计时
- 关于指针的小问题———C++的学习之旅
- asp.net 分页存储过程
- poj 3641 Pseudoprime numbers 【快速幂】
- java HashMap在不发生冲突的情况下get(key)时间复杂度是o(1)
- java学习——类和对象
- 题目1073:杨辉三角形
- Openmp和MKL的一点兼容性问题:VS2010+MKL10.0+OpenMP2.0
- HDU's ACM 1709 The Balance