计时器 android
Chronometer android
请帮帮我,我做了我的拳头 android 应用程序,计时器,但这里出了点问题,我不知道是什么。当我点击 Start 时,计时器运行正常,但是当我点击 Stop(或 Reset)时,然后再次 Start 继续它将是 00:0(, 00:0*, 00:0/,.. .
我的代码:
import android.os.Bundle;
import android.os.SystemClock;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.TextView;
/**
* Created by Admin on 6/26/2015.
*/
public class Tab1 extends Fragment implements View.OnClickListener {
private Button buttonStart;
private Button buttonStop;
private Button buttonReset;
private Chronometer chronometerRun;
long time = 0;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v=inflater.inflate(R.layout.tab_1,container,false);
buttonStart=(Button)v.findViewById(R.id.buttonStrart);
buttonStop=(Button)v.findViewById(R.id.buttonStop);
buttonReset=(Button)v.findViewById(R.id.buttonReset);
chronometerRun=(Chronometer)v.findViewById(R.id.chronometerRunning);
buttonStart.setOnClickListener(this);
buttonStop.setOnClickListener(this);
buttonReset.setOnClickListener(this);
return v;
}
public void onClick(View v) {
switch(v.getId())
{
case R.id.buttonStrart:
chronometerRun.setBase(SystemClock.elapsedRealtime() + time);
chronometerRun.start();
break;
case R.id.buttonStop:
time = chronometerRun.getBase()+SystemClock.elapsedRealtime();
chronometerRun.stop();
break;
case R.id.buttonReset:
chronometerRun.setBase(SystemClock.elapsedRealtime());
chronometerRun.stop();
break;
}
}
}
我从您的代码中了解到,您使用的 setBase
方法有误。它允许您设置天文台自动作为参考的基准时间。然后 Chronometer 通过将当前时间与 setBase
方法中设置的值区分开来自动更新其视图,即 Chronometer 将当前时间设置为 SystemClock.elapsedRealtime() - getBase()
.
由于您将 time
添加到 SystemClock.elapsedRealtime()
,当您的 time
不为零时,它会给出当前时间的负值。
相反,您应该做的是在停止时将 time
设置为 SystemClock.elapsedRealtime()-chronometerRun.getBase()
,以保持自计时器开始以来经过的时间,然后从中减去 time
SystemClock.elapsedRealtime()
同时设置基准以在暂停时保持上次时差,您应该在重置时将 time
设置为 0
以便从零开始计时,即将基准时间设置为当前时间时间。
下面的 switch case 代码工作正常:
switch(v.getId())
{
case R.id.buttonStart:
Log.i("test",""+SystemClock.elapsedRealtime() + time);
chronometerRun.setBase(SystemClock.elapsedRealtime()-time) ;
chronometerRun.start();
break;
case R.id.buttonStop:
Log.i("test",""+SystemClock.elapsedRealtime() + time);
time = SystemClock.elapsedRealtime()-chronometerRun.getBase();
chronometerRun.stop();
break;
case R.id.buttonReset:
Log.i("test",""+SystemClock.elapsedRealtime() + time);
time=0;
chronometerRun.setBase(SystemClock.elapsedRealtime());
chronometerRun.stop();
break;
}
注意:在调试时使用Log.i("TAG",""+variableToWatch)
观察相关变量总是有用的,看看它们是如何变化的。
我在你所有的案例陈述之后添加了 Log.i("test",""+SystemClock.elapsedRealtime() + time);
以查看 time
的值
请帮帮我,我做了我的拳头 android 应用程序,计时器,但这里出了点问题,我不知道是什么。当我点击 Start 时,计时器运行正常,但是当我点击 Stop(或 Reset)时,然后再次 Start 继续它将是 00:0(, 00:0*, 00:0/,.. .
我的代码:
import android.os.Bundle;
import android.os.SystemClock;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.TextView;
/**
* Created by Admin on 6/26/2015.
*/
public class Tab1 extends Fragment implements View.OnClickListener {
private Button buttonStart;
private Button buttonStop;
private Button buttonReset;
private Chronometer chronometerRun;
long time = 0;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v=inflater.inflate(R.layout.tab_1,container,false);
buttonStart=(Button)v.findViewById(R.id.buttonStrart);
buttonStop=(Button)v.findViewById(R.id.buttonStop);
buttonReset=(Button)v.findViewById(R.id.buttonReset);
chronometerRun=(Chronometer)v.findViewById(R.id.chronometerRunning);
buttonStart.setOnClickListener(this);
buttonStop.setOnClickListener(this);
buttonReset.setOnClickListener(this);
return v;
}
public void onClick(View v) {
switch(v.getId())
{
case R.id.buttonStrart:
chronometerRun.setBase(SystemClock.elapsedRealtime() + time);
chronometerRun.start();
break;
case R.id.buttonStop:
time = chronometerRun.getBase()+SystemClock.elapsedRealtime();
chronometerRun.stop();
break;
case R.id.buttonReset:
chronometerRun.setBase(SystemClock.elapsedRealtime());
chronometerRun.stop();
break;
}
}
}
我从您的代码中了解到,您使用的 setBase
方法有误。它允许您设置天文台自动作为参考的基准时间。然后 Chronometer 通过将当前时间与 setBase
方法中设置的值区分开来自动更新其视图,即 Chronometer 将当前时间设置为 SystemClock.elapsedRealtime() - getBase()
.
由于您将 time
添加到 SystemClock.elapsedRealtime()
,当您的 time
不为零时,它会给出当前时间的负值。
相反,您应该做的是在停止时将 time
设置为 SystemClock.elapsedRealtime()-chronometerRun.getBase()
,以保持自计时器开始以来经过的时间,然后从中减去 time
SystemClock.elapsedRealtime()
同时设置基准以在暂停时保持上次时差,您应该在重置时将 time
设置为 0
以便从零开始计时,即将基准时间设置为当前时间时间。
下面的 switch case 代码工作正常:
switch(v.getId())
{
case R.id.buttonStart:
Log.i("test",""+SystemClock.elapsedRealtime() + time);
chronometerRun.setBase(SystemClock.elapsedRealtime()-time) ;
chronometerRun.start();
break;
case R.id.buttonStop:
Log.i("test",""+SystemClock.elapsedRealtime() + time);
time = SystemClock.elapsedRealtime()-chronometerRun.getBase();
chronometerRun.stop();
break;
case R.id.buttonReset:
Log.i("test",""+SystemClock.elapsedRealtime() + time);
time=0;
chronometerRun.setBase(SystemClock.elapsedRealtime());
chronometerRun.stop();
break;
}
注意:在调试时使用Log.i("TAG",""+variableToWatch)
观察相关变量总是有用的,看看它们是如何变化的。
我在你所有的案例陈述之后添加了 Log.i("test",""+SystemClock.elapsedRealtime() + time);
以查看 time