android Stopwatch实例

                                         Stopwatch 实例

package net.baisoft.stopwatch;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity implements Runnable {
	
	/**
	 * ��ǰ����ʱ��
	 */
	private long time = 0;
	
	/**
	 * ��ʼʱ��
	 */
	private long startTime;

	private Handler handler;
	
	/**
	 * ������ʾʱ��
	 */
	private TextView timeView;
	
	/**
	 * �����б���ʾ�ּ�ʱ��
	 */
	private ListView listView;
	
	/**
	 * ��ʼ��ť
	 */
	private Button startButton;
	
	/**
	 * ��ͣ��ť
	 */
	private Button pauseButton;
	
	/**
	 * �ּǰ�ť
	 */
	private Button markButton;
	
	/**
	 * ���ð�ť
	 */
	private Button resetButton;
	
	/**
	 * �ּ�ʱ�����
	 */
	private List<Long> marks;
	
	/**
	 * ���ĵ�ǰ״̬
	 * ��Ϊ�������С���ͣ��ֹͣ����״̬
	 */
	private int state = 0;
	
	private  static int STATE_RUNNING = 1;
	private  static int STATE_STOP = 0;
	private  static int STATE_PAUSE = 2;
	
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        //��ȡ������Ϣ��ƫ�� ��
        readEnvironment();
        Toast.makeText(this, "�����Ѷ�ȡ", Toast.LENGTH_LONG).show();
        
        //��ʼ��ť
        startButton = (Button)findViewById(R.id.start);
        startButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View view) {
				onStartClick(view);
			}
		});
        
        //��ͣ��ť
        pauseButton = (Button)findViewById(R.id.pause);
        pauseButton.setOnClickListener(new OnClickListener() {
        	@Override
        	public void onClick(View view) {
        		onPauseClick(view);
        	}
        });
        
        //�ּǰ�ť
        markButton = (Button) findViewById(R.id.mark);
        markButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View view) {
				onMarkClick(view);
			}
		});
        
        //���ð�ť
        resetButton = (Button) findViewById(R.id.reset);
        resetButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View view) {
				onResetClick(view);
			}
		});
        
        timeView = (TextView) findViewById(R.id.timeView);
        listView = (ListView) findViewById(R.id.ListView01);
        
        //���� handler
        handler = new Handler();
        
        // ���ø���ť
        setButtons();
        
        //����ʱ����ʾ
        if (state == STATE_STOP){
        	timeView.setText("Let's Run!");
        } else if(state == STATE_PAUSE){
        	timeView.setText(getFormatTime(time));
        }
		
        //��ʾ�б�
        refreshMarkList();
    }

    /**
     * ���״̬���ð�ť��ʾ�ڲ���ʾ
     */
	private void setButtons() {
		switch (state) {
		case 1://�����������
			startButton.setVisibility(View.GONE);
			pauseButton.setVisibility(View.VISIBLE);
			markButton.setVisibility(View.VISIBLE);
			resetButton.setVisibility(View.GONE);
			resetButton.setEnabled(false);
			break;
		case 2://�����ͣ��
			startButton.setVisibility(View.VISIBLE);
			pauseButton.setVisibility(View.GONE);
			markButton.setVisibility(View.GONE);
			resetButton.setVisibility(View.VISIBLE);
			resetButton.setEnabled(true);
			break;
		case 0://���ֹͣ��
			startButton.setVisibility(View.VISIBLE);
			pauseButton.setVisibility(View.GONE);
			markButton.setVisibility(View.GONE);
			resetButton.setVisibility(View.VISIBLE);
			resetButton.setEnabled(false);
			break;
		default:
			break;
		}
	}

    /**
     * ��ȡ����
     */
    @SuppressWarnings("unchecked")
	private void readEnvironment() {
    	SharedPreferences sharedPreferences = getSharedPreferences("environment", MODE_PRIVATE);
    	state = sharedPreferences.getInt("state", STATE_STOP);
    	startTime = sharedPreferences.getLong("startTime", 0);
    	time = sharedPreferences.getLong("time", 0);
    	
    	marks = new ArrayList<Long>();
    	SharedPreferences sharedPreferencesMarks = getSharedPreferences("marks", MODE_PRIVATE);
    	Map<String, Long> mapMarks = (Map<String, Long>) sharedPreferencesMarks.getAll();
    	for (int i = 0; i < mapMarks.size(); i++){
    		Long mark = mapMarks.get("" + i);
    		marks.add(mark);
    	}
    	
	}
    /**
     * ���滷��
     */
    private void saveEnvironment() {
    	SharedPreferences sharedPreferences = getSharedPreferences("environment", MODE_PRIVATE);
    	Editor editor = sharedPreferences.edit();
    	editor.putInt("state", state);
    	editor.putLong("time", time);
    	editor.putLong("startTime", startTime);
    	editor.commit();
    	
    	//����ּ����
    	SharedPreferences sharedPreferencesMarks = getSharedPreferences("marks", MODE_PRIVATE);
    	Editor editorMarks = sharedPreferencesMarks.edit();
    	editorMarks.clear();
    	for(Long mark : marks){
    		editorMarks.putLong(""  + marks.indexOf(mark), mark.longValue());
    	}
    	editorMarks.commit();
    }

	@Override
	protected void onPause() {
		super.onPause();
		if (state == STATE_RUNNING){//�����������
			handler.removeCallbacks(this);
		}
		
	}


	@Override
	protected void onDestroy() {
		super.onDestroy();
		//���滷��
		saveEnvironment();
		Toast.makeText(this, "��ǰ�����ѱ���", Toast.LENGTH_LONG).show();
	}

	@Override
	protected void onResume() {
		super.onResume();
		if (state == STATE_RUNNING){//�����������
			handler.post(this);
		}
	}

	/**
     * �������
     * @param view
     */
    protected void onResetClick(View view) {
    	//����״̬Ϊֹͣ
    	state = STATE_STOP;
    	
    	//����ˢ��
    	if (state == STATE_RUNNING){//�����������
			handler.removeCallbacks(this);
		}
    	
    	//��ʼ���ּ�����
		marks = new ArrayList<Long>();
		refreshMarkList();
		
		//����ʱ����ʾ
		time = 0;
		timeView.setText(getFormatTime(time));
		
		// ���ø���ť
        setButtons();
	}

    /**
     * �����ͣ
     * @param view
     */
	protected void onPauseClick(View view) {
		//����ˢ��
		if (state == STATE_RUNNING){//�����������
			handler.removeCallbacks(this);
		}
    	
		//����״̬Ϊ��ͣ
		state = STATE_PAUSE;
		
		// ���ø���ť
        setButtons();
	}

	/**
     * �����ʼ
     * @param view
     */
	protected void onStartClick(View view) {
		startTime = new Date().getTime() - time;
		
		handler.post(this);
		
		//��ʼ���ּ�����
		marks = new ArrayList<Long>();
		
		//����״̬Ϊ��������
		state = STATE_RUNNING;
		
		// ���ø���ť
        setButtons();
	}

	/**
	 * ����ּ�
	 * 
	 * @param view
	 */
	protected void onMarkClick(View view) {
		
		if(time == 0){
			return;
		}
		// ��ӷּ����, ���ļ�����ǰ��
		marks.add(0, time);
		
		//ˢ���б�
		refreshMarkList();
	}

	/**
	 * ˢ���б�
	 */
	private void refreshMarkList() {
		//��ʾ
		List<Map<String, Object>> data = new ArrayList<Map<String,Object>>();
		int no = marks.size();//���
		for(long mark : marks){
			Map<String, Object> map = new HashMap<String, Object>();
			map.put("mark", getFormatTime(mark));
			map.put("no", this.getString(R.string.mark) + no);
			no--;
			data.add(map);
			
		}
		String[] from = new String[]{"no","mark"};
		int[] to = new int[]{R.id.no, R.id.time};
		SimpleAdapter simpleAdapter = new SimpleAdapter(this, data, R.layout.item, from, to);
		listView.setAdapter(simpleAdapter);
	}
	@Override
	public void run() {
		handler.postDelayed(this, 50);
		time = new Date().getTime() - startTime;
		timeView.setText(getFormatTime(time));
	}

	/**
	 * �õ�һ����ʽ����ʱ��
	 * 
	 * @param time
	 * 			ʱ�� ����
	 * @return �֣��룺����
	 */
	private String getFormatTime(long time) {
		long millisecond = time % 1000;
		long second = (time / 1000) % 60;
		long minute = time / 1000 / 60;
		
		//�����µ�ֻ��ʾһλ
		String strMillisecond = "" + (millisecond / 100);
		//����ʾ��λ
		String strSecond = ("00" + second).substring(("00" + second).length() - 2);
		//����ʾ��λ
		String strMinute = ("00" + minute).substring(("00" + minute).length() - 2);
		
		return strMinute + ":" + strSecond + ":" + strMillisecond;
	}
}


 

你可能感兴趣的:(android,Date,ListView,String,object,button)