练手小项目(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
原创粉丝点击