android开发——分秒计时器(可 开始/暂停/继续/停止)

    最近在项目开发过程中,由于需要设计一个计时器的功能。所以在这里分享一个TimeUtils.可以实现 暂停/继续 的计时器;

话不多说,先看一下TimeUtils这个工具类;

package cn.com.hbtv.testtimer;

import android.os.Handler;
import android.os.Message;
import android.text.format.DateFormat;
import android.util.Log;
import android.widget.TextView;

import java.util.Timer;
import java.util.TimerTask;

/**
 * Created by Administrator on 2017/8/17.
 */
public class Timeutils {
    private static String  TAG = "<<<";
    private Timer mTimer = null;
    private TimerTask mTimerTask = null;
    private Handler mHandler = null;
    private static long count = 0;
    private boolean isPause = false;
    private static int delay = 1000;  //1s
    private static int period = 1000;  //1s
    private static final int UPDATE_TEXTVIEW = 0;
    TextView mTextView;
    public Timeutils(TextView mTextView){
        this.mTextView=mTextView;
            mHandler = new Handler(){

        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case UPDATE_TEXTVIEW:
                    updateTextView();
                    break;
                default:
                    break;
            }
        }
    };
    }
public void puseTimer(){
    isPause = !isPause;
}

    private void updateTextView(){
        int i = 1000;
        long time= count * i;
        CharSequence sysTimeStr = DateFormat.format("mm:ss", time);
       mTextView.setText(String.valueOf(sysTimeStr));
    }
    public void startTimer(){
        if (mTimer == null) {
            mTimer = new Timer();
        }

        if (mTimerTask == null) {
            mTimerTask = new TimerTask() {
                @Override
                public void run() {
                    Log.i(TAG, "count: "+String.valueOf(count));
                    sendMessage(UPDATE_TEXTVIEW);

                    do {
                        try {
                            Log.i(TAG, "sleep(1000)...");
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                        }
                    } while (isPause);

                    count ++;
                }
            };
        }

        if(mTimer != null && mTimerTask != null )
            mTimer.schedule(mTimerTask, delay, period);

    }

    public void stopTimer(){

        if (mTimer != null) {
            mTimer.cancel();
            mTimer = null;
        }

        if (mTimerTask != null) {
            mTimerTask.cancel();
            mTimerTask = null;
        }
        count = 0;

    }
    public void sendMessage(int id){
        if (mHandler != null) {
            Message message = Message.obtain(mHandler, id);
            mHandler.sendMessage(message);
        }
    }
}
做一下简单的说明,由于你要让你的计时器每一秒中就要进行更行,所以这里需要用到子线程来进行UI的更新;用dowwhile来控制线程的暂停和继续;


然后是在MainActivity中进行调用;

public class MainActivity extends AppCompatActivity {
    private static String  TAG = "<<<";
    private TextView mTextView = null;
    private Button mButton_start = null;
    private Button mButton_pause = null;
    private Button mButton_stop = null;
    Timeutils timeutils;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTextView = (TextView)findViewById(R.id.mytextview);
        mButton_start = (Button)findViewById(R.id.mybutton_start);
        mButton_pause = (Button)findViewById(R.id.mybutton_pause);
        mButton_stop = (Button)findViewById(R.id.mybutton_stop);
        timeutils=new Timeutils(mTextView);
        mButton_start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                timeutils.startTimer();
            }
        });

        mButton_pause.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                timeutils.puseTimer();
            }
        });
        mButton_stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                timeutils.stopTimer();
            }
        });

    }
}

调用就不多说了;就这么简单实用;

Demo下载:

http://download.csdn.net/download/weixin_39537009/9938742

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值