我在使用此方法取消此计时器时遇到问题。
public void nezablokovat() {
int secondsToRun = 9999999;
final ValueAnimator timern = ValueAnimator.ofInt(secondsToRun);
timern.setDuration(secondsToRun * 1000).setInterpolator(new LinearInterpolator());
timern.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int elapsedSeconds = (int) animation.getAnimatedValue();
int minutes = elapsedSeconds / 60;
int seconds = elapsedSeconds % 60;
if (seconds%10 == 1) {
Pis("$$$");
}
}
});
timern.start();
}
我想将timern.cancel();
放入onClick
Button的监听器中的其他方法。
请问你有什么想法?
如果我把timern.cancel()
放在这里:
void teplotahore() {
STup.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View view) {
timern.cancel();
}
}
}
);
}
编译器不知道timern
。
答案 0 :(得分:0)
我不知道你们整个班级是如何构建的,但我相信你们可能只需要移动"计时器" "可变"在构造函数之外(在它之上),这使它成为一个字段。
字段就像一个变量,但它对类中的所有方法都是可见的。
例如:
final ValueAnimator timern = ValueAnimator.ofInt(secondsToRun);
public void nezablokovat() {
int secondsToRun = 9999999;
timern.setDuration(secondsToRun * 1000).setInterpolator(new LinearInterpolator());
timern.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int elapsedSeconds = (int) animation.getAnimatedValue();
int minutes = elapsedSeconds / 60;
int seconds = elapsedSeconds % 60;
if (seconds%10 == 1) {
Pis("$$$");
}
}
});
timern.start();
}
void teplotahore() {
STup.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View view) {
timern.cancel();
}
}
});
}