Android 实现一个计时器

来源:互联网 发布:联合国国际贸易数据库 编辑:程序博客网 时间:2024/06/09 19:17

最近,在做一个Android项目,需要用到一个计时器。特此,拿来和大家分享一下。
首先,看一下实现效果图。
这里写图片描述

实现思路

主要利用Handler中的postDelayed (Runnable r, long delayMillis) 函数每隔1秒钟更新一次UI。

具体实现如下。

布局文件

activity_main.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="match_parent"    android:orientation="vertical"    tools:context="com.example.caltimer.MainActivity" >    <TextView         android:id="@+id/tv_timer"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginTop="50dp"        android:padding="20dp"        android:gravity="center"        android:text="00:00:00"        android:textSize="50sp"/>    <ImageView         android:id="@+id/img_start"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:padding="10dp"        android:layout_alignParentBottom="true"        android:layout_centerInParent="true"        android:src="@drawable/btn_pause"        /></RelativeLayout>
核心代码

MainActivity.java

package com.example.caltimer;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.view.View;import android.view.View.OnClickListener;import android.widget.ImageView;import android.widget.TextView;public class MainActivity extends Activity implements OnClickListener{    private TextView tv_timer;    private ImageView img_start;    private boolean isStopCount = false;    private boolean isPause = true;    private Handler mHandler = new Handler();    private long timer = 0;    private String timeStr = "";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        findViews();        countTimer();    }    private void findViews() {        tv_timer = (TextView) findViewById(R.id.tv_timer);        img_start = (ImageView) findViewById(R.id.img_start);        img_start.setOnClickListener(this);    }    @Override    public void onClick(View v) {        switch (v.getId()) {        case R.id.img_start:            if(!isPause){                isPause = true;                isStopCount = false;                img_start.setImageResource(R.drawable.btn_pause);            } else{                isPause = false;                isStopCount = true;                img_start.setImageResource(R.drawable.btn_start);            }            break;        default:            break;        }    }    private Runnable TimerRunnable = new Runnable() {        @Override        public void run() {            if(!isStopCount){                timer += 1000;                timeStr = TimeUtil.getFormatTime(timer);                tv_timer.setText(timeStr);            }            countTimer();        }    };    private void countTimer(){        mHandler.postDelayed(TimerRunnable, 1000);    }    @Override    protected void onDestroy() {        super.onDestroy();        mHandler.removeCallbacks(TimerRunnable);    }}

源代码地址

1 0
原创粉丝点击