eoe 移动开发者论坛

 找回密码
 加入eoe

QQ登录

只需一步,快速开始

查看: 315|回复: 2
收起左侧

[Android实例] TextView+Hendler 实现计时器

[复制链接]

签到天数: 11 天

连续签到: 1 天

[LV.3]偶尔看看II

1

主题

20

帖子

203

e币
发表于 2017-3-18 09:52:30 | 显示全部楼层 |阅读模式

没有eoe的账号,级别还太低,出门如何吹牛逼?

您需要 登录 才可以下载或查看,没有帐号?加入eoe

x
本帖最后由 wiselmj 于 2017-3-18 10:16 编辑

/**
* 计时器
*/
Handler handler = new Handler(){
    public void handleMessage(Message msg){         // handle message
switch (msg.what) {
            case 1:
                updateView();
                if(!is_time_stop){//判断计时器是否停止
                    Message message = handler.obtainMessage(1);
                    handler.sendMessageDelayed(message, 1000);      // send message
}
                break;
        }
        super.handleMessage(msg);
    }
};
private boolean is_time_stop = false;//计时器是否停止
private int timeusedinsec = 0;// 秒表时间
private String time_str = "";// 秒表时间字符串
// 开始计时
private void startTimer(){
    is_time_stop = false;
//获取保存在缓存中的上一次的计时时间
    String timeStr = aCache.getAsString(CacheParam.CACHE_TRAINING_USETIME);
    if(!TextUtils.isEmpty(timeStr)){//判断缓存中的值是否存在
        timeusedinsec = Integer.valueOf(timeStr);
    }else {
        timeusedinsec = 0;
    }
    Message message = handler.obtainMessage(1);
    handler.sendMessageDelayed(message, 1000);      // send message
}
//停止计时
private void stopTimer(){
    is_time_stop = true;
//停止计时器时保存 时间到缓存中
    aCache.put(CacheParam.CACHE_TRAINING_USETIME,String.valueOf(timeusedinsec),CacheParam.CACHE_TIME_TRAINING);
}
//重新计时
private void resetTimer(){
    is_time_stop = false;
    timeusedinsec = 0;
    aCache.put(CacheParam.CACHE_TRAINING_USETIME,String.valueOf(timeusedinsec),CacheParam.CACHE_TIME_TRAINING);
    Message message = handler.obtainMessage(1);
    handler.sendMessageDelayed(message, 1000);
}
// 更新时间view
private void updateView() {
    timeusedinsec++;
    int minute = (int) (timeusedinsec / 60)%60;
    int second = (int) (timeusedinsec % 60);
    time_str = "";
    if (minute < 10) {
        time_str += "0" + minute;
    }else {
        time_str += "" + minute;
    }
    if (second < 10){
        time_str +=":0"+second;
    } else{
        time_str +=":"+second;
    }
    textview.setText(time_str);
}

private ACache aCache;
private TextView textView;
@Override
protected void onResume() {
    super.onResume();
    textView = (TextView)findViewById(R.id.header_textview);
// 这里的aCache用于缓存计时器时间可以在退出Activity后重新进入时还能从上一次时间开始计时
// ACache 是文件缓存的工具类在网上可以找到文件缓存相关的教程,本例可以将缓存的代码删除不影响计算器功能
    aCache = ACache.get(TrainingActivity.this);
    startTimer();
}

@Override
protected void onPause() {
    super.onPause();
    stopTimer();//activity 停止时调用 可保存计时时间
}

@Override
protected void onDestroy() {
    super.onDestroy();
    stopTimer();
}

签到天数: 11 天

连续签到: 1 天

[LV.3]偶尔看看II

1

主题

20

帖子

203

e币
 楼主| 发表于 2017-3-18 09:59:25 | 显示全部楼层
如果不需要保存计时器时间 (及不需要退出Activity后再次进入从上一次时间开始计时功能)可以将Acache部分代码删除

签到天数: 23 天

连续签到: 1 天

[LV.4]偶尔看看III

1

主题

121

帖子

508

e币
QQ认证
发表于 6 天前 | 显示全部楼层
66666666666666666666666666666666
*滑动验证:
您需要登录后才可以回帖 登录 | 加入eoe

本版积分规则

推荐阅读
赞助商们

QQ|联系我们|小黑屋|手机版|eoe 移动开发者论坛 ( 京ICP备11018032 京公网安11010802020210  

GMT+8, 2017-5-23 18:46 , Processed in 0.552896 second(s), 22 queries , Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表
关闭

扫一扫 关注eoe官方微信