java - 在一项活动中使用多个计时器
问题描述
我试图在一项活动中使用多个计时器,但每个计时器的行为都不像预期的那样。
我希望我能够同时启动每个计时器,并且我已经为每个不同的变量声明了不同的函数。
活动截图
代码
timeWhenStoppedSetup = 0;
timeWhenStoppedProcessing = 0;
timeWhenStoppedReconciliation = 0;
timeWhenStoppedCleaning = 0;
chronometerSetUp.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
@Override
public void onChronometerTick(Chronometer chronometerChanged) {
chronometerSetUp = chronometerChanged;
long time = SystemClock.elapsedRealtime() - chronometerSetUp.getBase();
int h = (int)(time /3600000);
int m = (int)(time - h*3600000)/60000;
int s= (int)(time - h*3600000- m*60000)/1000 ;
String t = (h < 10 ? "0"+h: h)+":"+(m < 10 ? "0"+m: m)+":"+ (s < 10 ? "0"+s: s);
chronometerSetUp.setText(t);
}
});
startSetUp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startStopChronometerSetUp(startSetUp);
}
});
chronometerProcessing.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
@Override
public void onChronometerTick(Chronometer chronometerChanged) {
chronometerProcessing = chronometerChanged;
long time = SystemClock.elapsedRealtime() - chronometerProcessing.getBase();
int h = (int)(time /3600000);
int m = (int)(time - h*3600000)/60000;
int s= (int)(time - h*3600000- m*60000)/1000 ;
String t = (h < 10 ? "0"+h: h)+":"+(m < 10 ? "0"+m: m)+":"+ (s < 10 ? "0"+s: s);
chronometerProcessing.setText(t);
}
});
startProcessing.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startStopChronometerProcessing(startProcessing);
}
});
chronometerReconciliation.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
@Override
public void onChronometerTick(Chronometer chronometerChanged) {
chronometerReconciliation = chronometerChanged;
long time = SystemClock.elapsedRealtime() - chronometerReconciliation.getBase();
int h = (int)(time /3600000);
int m = (int)(time - h*3600000)/60000;
int s= (int)(time - h*3600000- m*60000)/1000 ;
String t = (h < 10 ? "0"+h: h)+":"+(m < 10 ? "0"+m: m)+":"+ (s < 10 ? "0"+s: s);
chronometerReconciliation.setText(t);
}
});
startReconciliation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startStopChronometerReconciliation(startReconciliation);
}
});
chronometerCleaning.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
@Override
public void onChronometerTick(Chronometer chronometerChanged) {
chronometerCleaning = chronometerChanged;
long time = SystemClock.elapsedRealtime() - chronometerCleaning.getBase();
int h = (int)(time /3600000);
int m = (int)(time - h*3600000)/60000;
int s= (int)(time - h*3600000- m*60000)/1000 ;
String t = (h < 10 ? "0"+h: h)+":"+(m < 10 ? "0"+m: m)+":"+ (s < 10 ? "0"+s: s);
chronometerCleaning.setText(t);
}
});
startCleaning.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startStopChronometerCleaning(startCleaning);
}
});
}
public void startStopChronometerSetUp(View view){
if(isStart){
chronometerSetUp.stop();
timeWhenStoppedSetup = chronometerSetUp.getBase() - SystemClock.elapsedRealtime();
isStart = false;
}else{
chronometerSetUp.setBase(SystemClock.elapsedRealtime() + timeWhenStoppedSetup);
chronometerSetUp.start();
isStart = true;
((Button)view).setBackgroundResource(stop);
}
}
public void startStopChronometerProcessing(View view){
if(isStart){
chronometerProcessing.stop();
timeWhenStoppedProcessing = chronometerProcessing.getBase() - SystemClock.elapsedRealtime();
isStart = false;
}else{
chronometerProcessing.setBase(SystemClock.elapsedRealtime() + timeWhenStoppedProcessing);
chronometerProcessing.start();
isStart = true;
((Button)view).setBackgroundResource(stop);
}
}
public void startStopChronometerReconciliation(View view){
if(isStart){
chronometerReconciliation.stop();
timeWhenStoppedReconciliation = chronometerReconciliation.getBase() - SystemClock.elapsedRealtime();
isStart = false;
}else{
chronometerReconciliation.setBase(SystemClock.elapsedRealtime() + timeWhenStoppedReconciliation);
chronometerReconciliation.start();
isStart = true;
((Button)view).setBackgroundResource(stop);
}
}
public void startStopChronometerCleaning(View view){
if(isStart){
chronometerCleaning.stop();
timeWhenStoppedCleaning = chronometerCleaning.getBase() - SystemClock.elapsedRealtime();
isStart = false;
}else{
chronometerCleaning.setBase(SystemClock.elapsedRealtime() + timeWhenStoppedCleaning);
chronometerCleaning.start();
isStart = true;
((Button)view).setBackgroundResource(stop);
}
}
我在这里做错了什么,或者这甚至可能吗?
描述它,其他天文钟的行为将是随机的。可以随机开始等。
解决方案
推荐阅读
- r - 在R中按名称简单循环列
- javascript - javascript构建表中的图像和单元格间距
- c++ - 从旋转矩形中检索中心
- windows - 如何获取文件资源管理器窗口的开始时间?
- sublimetext3 - ST3底部的状态栏怎么去掉
- c# - Get first row of an ordered Gtk TreeView(Gtk#)
- python - 我试图将三个不同大小的数组打印到表格中
- html - 如何在类型文本框上方放置文本
- javascript - React 和 Redux 错误 - 第一次使用 Redux
- azure-data-factory - 禁用 Azure 数据工厂管道中的活动而不将其删除