android 两种实现计时器时分秒的实现,把时间放在你的手中~
原文链接:http://blog.youkuaiyun.com/csdn1125550225/article/details/54375174
参考链接:http://www.cnblogs.com/liushilin/p/5802954.html
可能我们在开发中会时常用到计时器这玩意儿,比如在录像的时候,我们可能需要在右上角显示一个计时器。这个东西其实实现起来非常简单。
只需要用一个控件Chronometer,是的,就这么简单,我都不好意思讲述一下了。
1 <Chronometer 2 android:layout_width="wrap_content" 3 android:layout_height="wrap_content" 4 android:format="%s" 5 android:id="@+id/timer"/>
是的,就这么简单。java代码同样
1 @Override 2 protected void onCreate(Bundle savedInstanceState) { 3 super.onCreate(savedInstanceState); 4 setContentView(R.layout.activity_main); 5 timer = (Chronometer) findViewById(R.id.timer); 6 } 7 8 public void btnClick(View view) { 9 timer.setBase(SystemClock.elapsedRealtime());//计时器清零 10 timer.start(); 11 }
超简单有木有?看看运行结果:
或许你会说,这个要是需要显示上时间怎么弄呢?不急不急,两行代码就能解决的事情。
1 public void btnClick(View view) { 2 timer.setBase(SystemClock.elapsedRealtime());//计时器清零 3 int hour = (int) ((SystemClock.elapsedRealtime() - timer.getBase()) / 1000 / 60); 4 timer.setFormat("0"+String.valueOf(hour)+":%s"); 5 timer.start(); 6 } 7 8 public void stopClick(View view) { 9 timer.stop(); 10 }
恩,对,就是 这么简单,不过别忘了把xml的format改一下
1 <Chronometer 2 android:layout_width="match_parent" 3 android:layout_height="wrap_content" 4 android:format="00:00:00" 5 android:gravity="center" 6 android:id="@+id/timer"/>
是的,你没有看错,这样就可以了,不信,你看!
就和你想象的录像上方的时间一样有木有?恩。你前面设置一个圆圈,再设置计时器颜色就和它一样有逼格了。
自己写了个简单例子 方便看 去掉原文刷新UI 的操作 方便看timer 和timerTask
package com.wang.myapplication; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.Button; import java.util.Timer; import java.util.TimerTask; /** * 汪少立 * timer timerTask A Simple Example */ public class MainActivity extends AppCompatActivity implements View.OnClickListener { public static final String TAG = "MainActivity"; private Button bt_stop; private Timer timer; long i=0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); timer = new Timer(); // public void schedule(TimerTask task, long delay, long period) /** * delay 延迟执行时间 * period 间隔执行时间 */ timer.schedule(new TimerTask() { @Override public void run() { // your code // for example i+=1000; Log.i(TAG,i+""); } }, 0, 1000); } private void initView() { bt_stop = (Button) findViewById(R.id.bt_stop); bt_stop.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { //点击按钮停止 case R.id.bt_stop: if(null!=timer){ timer.cancel(); } break; } } }
1 异常日志:
java.lang.IllegalStateException: Timer was canceled
2 所做操作:
调用cancel()取消后不能再执行 schedule语句,否则提示出现以上异常。
3 解决方案:
正确的中止Timer方法:
timer.cancel();
timer.purge();
timer = null;(可选)