我正在为Android 2.2设计一个天文台/倒数计时器应用程序,并希望按一下按钮同时启动计时器和计时器.因此,理想情况下,我想在秒(时间)都记时计和定时器在同一个实例来改变.(即使计时器正在计数,计时器也会倒计时).由于我使用Android提供的计时器和计时器功能,当用户按下"开始"按钮时,我编写了以下代码
private boolean mStartPressedOnce = false;
long mTimeWhenStopped = 0;
Chronometer mChronometer;
MyCounter mCounter;
...
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.StartButton:
// Perform some initialization for the chronometer depending
// on the button press
if (mStartPressedOnce == false) {
mChronometer.setBase(SystemClock.elapsedRealtime());
} else {
mChronometer.setBase(SystemClock.elapsedRealtime() + mTimeWhenStopped);
}
// Perform the initialization for the timer
mCounter = new MyCount(45000, 1000);
// Fire up the chronometer
mChronometer.start();
// Fire up the timer …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Chronometer在我的Android应用程序中创建一个简历按钮.到目前为止,我有这个简历方法的代码片段:
private long pauseResume() {
long timeWhenStopped = chronometer.getBase() - SystemClock.elapsedRealtime();
return timeWhenStopped;
}
Run Code Online (Sandbox Code Playgroud)
这是恢复按钮的代码:
public void onClick(View v) {
switch(v.getId()) {
...
case R.id.resume_button:
chronometer.setBase(SystemClock.elapsedRealtime() + pauseResume());
chronometer.start();
break;
}
}
Run Code Online (Sandbox Code Playgroud)
问题:例如,当我在00:05暂停计时器然后在10秒钟后按下恢复按钮时,计时器将在00:15重新开始计时.
我希望它再次从00:05开始,而不是00:15,因为它是一个"恢复"功能.
我很高兴你能提供帮助.谢谢.
假设我有这个变量:
long myMillis = 20000;
Run Code Online (Sandbox Code Playgroud)
这意味着我希望我的计时器在20秒(00:20)开始.
我试过这样做:
chronometer.setBase(myMillis);
Run Code Online (Sandbox Code Playgroud)
但它不起作用.它不会以20秒开始.它从一些没有意义的奇怪时间开始.
我的天文台总是从0:10开始或者像其他时间一样...它不是从0:01本身开始的......任何人都可以帮助我
谢谢,
在我的应用程序中,我想显示一个停止计时器手表.当我通过Google搜索时,我在开发者网站上找到了一个名为Chronometer的选项.它看起来就像一个停止计时器手表.
当我单击开始按钮时,我希望计时器开始,当我单击暂停按钮时,必须暂停计时器,一旦我点击开始它必须从它停止的时间开始.
但是在这个天文台里它从0开始,当我在1分10秒点击暂停时它会暂停.当我再次点击再次启动5分钟后,计时器从6分钟开始计时10秒,即使暂停计时器正在运行,如何停止计时并在停止时恢复计时.
以下是我的天文台代码
Start = (Button)findViewById(R.id.widget306);
Start.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
chronometer.start();
}
});
Stop = (Button)findViewById(R.id.widget307);
Stop.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
chronometer.stop();
}
});
}
Run Code Online (Sandbox Code Playgroud) 我有一个计时器,从用户遇到该活动开始计时
我目前在onCreate期间使用计时器设置(最初仅在满足某些条件时启动).但我需要计时器继续向上计数,直到应用程序及其所有视图都关闭(我有一个"退出"功能来执行此操作).
问题是,每次我查看另一个标签并返回其活动时,计时器会重置为零.(这与oncreate有关,但我不知道它的方式)
我没有找到一种直观的方法来自行保存天文台的状态或计数(或者可能跟踪我自己的时间并在不同的时间点直观地更新天文台)
我的一个想法是使用服务启动Chronometer并让服务继续计数,同时在现有活动更新中使用计时器的当前时间计数作为字符串进行文本视图
任何关于这个问题的已知方法的见解将不胜感激!
这更复杂,因为这是tabhost中的活动,并且每次加载视图时tabhost都会调用onPause和onResume,因此这会破坏生命周期功能.
android chronometer android-service android-lifecycle android-activity
当我从具有该start()功能的另一个类启动计时器时.它似乎没有开始.它总是给我起初的价值"00:00",仅此而已.
public class Kronometre {
Context context;
long countUp;
Chronometer stopWatch;
String asText = "00.00";
public Kronometre(Context context) {
this.context = context;
stopWatch = new Chronometer(context);
}
public void start() {
stopWatch.setOnChronometerTickListener(new OnChronometerTickListener(){
@Override
public void onChronometerTick(Chronometer arg0) {
countUp = (SystemClock.elapsedRealtime() - arg0.getBase()) / 1000;
asText = (countUp / 60) + "." + (countUp % 60);
}
});
stopWatch.start();
}
public String getTime() {
return asText;
}
}
Run Code Online (Sandbox Code Playgroud) 我想实现一个时间计数器(从0开始计数),基本上得到保存时间变量(开始时间,这是因为一旦用户点击一个按钮,创建)和减去当前时间(Calendar.getInstance()可能?这样结果就是两次之间的差异(HH:MM:SS).这个方法将在计时器的每个刻度上运行,以便文本视图每秒更新一次,有效地创建我的计时器.
现在,我采用这条迂回路线,因为这是我能够找到的唯一方法,即使应用程序被杀,也可以节省时间.这是因为startTime变量在创建后立即保存到SharedPreferences,并且在每个Tick中,系统只需找到startTime和当前时间之间的差异即可在现场计算我的计时器.
现在,我已经尝试将我的startTime作为Calendar变量并初始化为:
Calendar startTime = Calendar.getInstance();
Run Code Online (Sandbox Code Playgroud)
然后
elapsedTime = startTime - Calendar.getInstance();
Run Code Online (Sandbox Code Playgroud)
但显然,这不起作用.
在一个用C#编写的类似项目中,我能够使用它,虽然使用了DateTime变量......在Android中有这样的方法吗?
如果这太复杂了,是否有更好的方法来保存我的天文台计步器进度?
谢谢,麻烦您了!
当我点击图像按钮(应启动计时器)时,计时器不会从00:00开始,而是从应用程序运行时开始.例如,如果我打开应用程序并等待10秒钟,当我点击图像按钮时,计时器将从00:10开始计时..我应该怎样做才能从00:00开始计时器每当我点击图像按钮?
这是我的代码:
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Chronometer;
import android.widget.ImageButton;
import android.os.SystemClock;
public class MainScreen extends Activity {
Chronometer focus;
ImageButton start;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_screen);
start=(ImageButton)findViewById(R.id.FingerStartImageBtn);
focus=(Chronometer)findViewById(R.id.timer);
focus.setBase(SystemClock.elapsedRealtime());
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
focus.start();
}
});
}
}
Run Code Online (Sandbox Code Playgroud) 我知道计时器的格式可以是MM:SS或HH:MM:SS,但我想知道如何使用setFormat()和getFormat()来设置HH:MM:SS模式(现在是MM:SS).
这时,我使用:
android:format="@string/chronometer_initial_format"通过声明设置Format:
<xliff:g id="initial-format">%1$s</xliff:g>
Run Code Online (Sandbox Code Playgroud)
在res/values/strings.xml
我试图通过谷歌搜索,但无法得到很好的答案.有人可以建议吗?谢谢