安卓实战项目之制作简单的计时器

安卓实战项目之计算器


项目源码:
package com.example.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.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
//按钮比较多而且每个按钮都需要对应的监听事件,可以使用接口OnClickListener
public class MainActivity extends Activity implements OnClickListener {

    private  EditText time;
    private TextView showtime;
    private Button gettime,start,stop;
    private int i=0;//用来递减的变量
    private  Timer timer=null;//创建一个线程
    private TimerTask  timertask=null;//配合使用这个Timer
    
    
    private Handler mHandler=new Handler(){
    	public  void handleMessage(Message msg){
    		showtime.setText(msg.arg1+"");//修改为传递过来的i
    		startTime();//循环这个函数
    	}
    };
    //这个handler是用来接收和发送线程传递的信息
    
   
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initview();
		
				
		
		
	}

	
	//初始化一些控控件和监听按钮
	private void  initview() {
		// TODO Auto-generated method stub
		time=(EditText)findViewById(R.id.inputtime);
		showtime=(TextView)findViewById(R.id.showtime);
		gettime=(Button)findViewById(R.id.gettime);
		start=(Button)findViewById(R.id.start);
		stop=(Button)findViewById(R.id.stop);
		gettime.setOnClickListener(this);
		start.setOnClickListener(this);
		stop.setOnClickListener(this);
		
		
	}


	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		//v.getid()就是继承VIEW下的所有的控件,包括button
		switch (v.getId()) {
		case R.id.gettime:
			showtime.setText(time.getText().toString());//在没有开始倒计时显示最初的总时间
			i=Integer.parseInt(time.getText().toString());
			
			break;
		case R.id.start:
			startTime();
			break;

		case R.id.stop:
			stopTime();
			break;
		}
		
		
	}
	//开启线程
	public void startTime()
	{
		timer=new Timer();
		//重写执行方法
		timertask=new TimerTask() {
			
			@Override
			public void run() {
				// TODO Auto-generated method stub
				i--;
				Message message=mHandler.obtainMessage();
				//obtainmessage()是从消息池中拿来一个msg 不需要另开辟空间new
                //new需要重新申请,效率低,obtianmessage可以循环利用,也就是实例化一个Message
				message.arg1=i;//message类中agr成员是用来存储一个整形变量的
				mHandler.sendMessage(message);//发送消息
				
				
			}
			
		};
		
		timer.schedule(timertask, 1000);//延迟发送这个线程为1s发送一次
		
	}
	//停止线程
	public void stopTime()
	{
		timer.cancel();//取消这个进程
		
	}

	
}
总结:
1.理解了线程的基本含义,子线程的创建,子线程的初始化,子线程如何传递消息,以及了解了message类的使用方法。
2.关于handler这类的理解:http://blog.sina.com.cn/s/blog_77c6324101016jp8.html
                                               http://blog.sina.com.cn/s/blog_6ee33f040101d7bx.html
3.对于代码的规范有了一定的了解,比如代码中先是定义了全局变量用来指定需要的控件 线程 等,而且由于按钮比较多继承了一个OnClickListener的接口,
在后面的方法onClick中利用switch对每个控件进行监听事件,初始化放在方法initview()方法中。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值