Android使用Timer編寫倒計時程式

來源:互聯網
上載者:User

標籤:

    開篇大家可以先看看Timer的基礎用法,以及簡單的原理。http://my.oschina.net/zhengweishan/blog/493891 Java之Timer使用。這裡我要說的是Android使用Timer編寫一個倒計時程式。

    需求:實現簡單的倒計時程式。要求可以根據使用者的輸入實現倒計時,時間到的時候有友好的提示。

    分析:首先要實現這個功能,我想到的第一個方法就是使用Timer這個類。然後就是分析使用者介面怎麼設計,由於這個是簡單程式,所以就採用Android原生的一些UI組件Button TextView EditText來設計基本的頁面。友好提示我打算使用Toast這種機制。這裡打算讓使用者輸入分秒。

源碼:https://git.oschina.net/zhengweishan/AndroidTimer

    Activity代碼:

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;

import android.widget.Toast;


public class MainActivity extends Activity implements OnClickListener {


private Button startButton;

private Button stopButton;

private EditText minuteText;

private EditText secondText;

private TextView myTime;

private int minute = 0;

private int second = 0;


private Timer timer = null;

private TimerTask task = null;


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initView();

}


private void initView() {

startButton = (Button) findViewById(R.id.startBtn);

stopButton = (Button) findViewById(R.id.stopBtn);

minuteText = (EditText) findViewById(R.id.minute);

secondText = (EditText) findViewById(R.id.second);

myTime = (TextView) findViewById(R.id.myTime);

startButton.setOnClickListener(this);

stopButton.setOnClickListener(this);

}


@Override

public void onClick(View v) {

// TODO Auto-generated method stub

switch (v.getId()) {

case R.id.startBtn:

start();

break;

case R.id.stopBtn:

stop();

break;

}

}


public void start() {

if (!minuteText.getText().toString().equals("")) {

minute = Integer.parseInt(minuteText.getText().toString());

}


if (!secondText.getText().toString().equals("")) {

second = Integer.parseInt(secondText.getText().toString());

}


myTime.setText(minute + ":" + second);


task = new TimerTask() {

@Override

public void run() {

Message msg = new Message();

msg.what = 0;

mHandler.sendMessage(msg);

}

};


timer = new Timer();

timer.schedule(task, 0, 1000);

}


public void stop() {

timer.cancel();

}

public void timeProcess(){

if (minute == 0) {

if (second == 0) {

//myTime.setText("Time out!");

Toast.makeText(getApplicationContext(), "Time out!",5);

if (timer != null) {

timer.cancel();

timer = null;

}

if (task != null) {

task = null;

}

} else {

second--;

if (second >= 10) {

myTime.setText("0" + minute + ":" + second);

} else {

myTime.setText("0" + minute + ":0" + second);

}

}

} else {

if (second == 0) {

second = 59;

minute--;

if (minute >= 10) {

myTime.setText(minute + ":" + second);

} else {

myTime.setText("0" + minute + ":" + second);

}

} else {

second--;

if (second >= 10) {

if (minute >= 10) {

myTime.setText(minute + ":" + second);

} else {

myTime.setText("0" + minute + ":" + second);

}

} else {

if (minute >= 10) {

myTime.setText(minute + ":0" + second);

} else {

myTime.setText("0" + minute + ":0" + second);

}

}

}

}

}


private Handler mHandler = new Handler() {

public void handleMessage(Message msg) {

timeProcess();

};

};

}

xml布局檔案:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="wrap_content"

    android:paddingBottom="@dimen/activity_vertical_margin"

    android:paddingLeft="@dimen/activity_horizontal_margin"

    android:paddingRight="@dimen/activity_horizontal_margin"

    android:paddingTop="@dimen/activity_vertical_margin"

    tools:context="com.example.androidtimer.MainActivity" >


    <TextView

        android:id="@+id/lable"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignParentLeft="true"

        android:layout_alignParentTop="true"

        android:text="@string/lable" />


    <EditText

        android:id="@+id/minute"

        android:layout_width="100dp"

        android:layout_height="wrap_content"

        android:layout_alignLeft="@+id/lable"

        android:layout_below="@+id/lable"

        android:layout_marginTop="40dp"

        android:ems="10" />


    <TextView

        android:id="@+id/textView2"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignBottom="@+id/minute"

        android:layout_toRightOf="@+id/minute"

        android:text="@string/minute" />


    <EditText

        android:id="@+id/second"

        android:layout_width="100dp"

        android:layout_height="wrap_content"

        android:layout_toRightOf="@+id/textView2"

        android:layout_below="@+id/lable"

        android:layout_marginTop="40dp"

        android:ems="10" />


    <TextView

        android:id="@+id/textView3"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_toRightOf="@+id/second"

        android:layout_alignBottom="@+id/second"

        android:text="@string/second" />

    

    <TextView

        android:id="@+id/myTime"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        android:layout_above="@+id/startBtn"

        android:layout_alignRight="@+id/textView3"

        android:layout_margin="30dp"

        android:gravity="center"

        android:textColor="#FF0000"

        android:textSize="60sp"

        android:textStyle="bold" />

    

    <Button

        android:id="@+id/startBtn"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignLeft="@+id/minute"

        android:layout_alignParentBottom="true"

        android:text="@string/startBtn" />


    <Button

        android:id="@+id/stopBtn"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignBottom="@+id/startBtn"

        android:layout_toRightOf="@+id/startBtn"

        android:layout_alignRight="@+id/textView3"

        android:layout_marginRight="40dp"

        android:text="@string/stopBtn" />

</RelativeLayout>

string.xml檔案:

<?xml version="1.0" encoding="utf-8"?>

<resources>


    <string name="app_name">AndroidTimer</string>

    <string name="hello_world">Hello world!</string>

    <string name="action_settings">Settings</string>

    <string name="lable">請設定時間:</string>

    <string name="minute">分:</string>

    <string name="second">秒</string>

    <string name="startBtn">開始計時</string>

    <string name="stopBtn">停止計時</string>


</resources>


Android使用Timer編寫倒計時程式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.