循环中的计数和倒计时。 android
countup and countdown in a loop. android
例如,我想从 1 数到 15,然后从 15 数到 1 并重复该过程...您可以帮我完成吗?我尝试了一切。而不是 if,我尝试了 While,它出于某种原因给出了随机数。这种方法只减到14。它不会完全倒计时。
int counter = 0;
int total = 15;
number = (TextView) this.findViewById(R.id.number);
final Timer c=new Timer();
c.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
if (counter < total && timerHasStarted ) {
runOnUiThread(new Runnable()
{
@Override
public void run()
{
number.setText("" +counter );
counter++;
}
});
}
if (counter <= total && timerHasStarted ) {
runOnUiThread(new Runnable()
{
@Override
public void run()
{
number.setText("" +counter );
counter++;
}
});
if (counter == total && timerHasStarted) {
countingDown = true;
if(countingDown){
counter--;
}
else{
counter++;
}
//setting the text here
if(counter%15==0){ //only 0 when counter equals 0 or 15
countingDown=!countingDown; // starting the other direction at next time
}
}
}}}, 1000, 300);
timerHasStarted = true;
您没有提供完整的代码,但是
你的逻辑有一个很大的 flaw:first 计数器是 0 所以第一个 if 会把它加起来,因为它小于 15......它一直这样做直到它达到 15 然后它什么都不做......但是这是第二个,如果现在计数器是 15,它被执行,使计数器再次回到 14,所以它在 14 和 15 之间改变整个时间从它第一次到达的点开始。
这是我的解决方案:
有一个像 countingDown 这样的布尔值,并在开始时将其设置为 false,如果它达到 15,则将其设置为 true。
如果 countingDown 是 true/false,检查这个布尔值要做什么。
喜欢:
if(countingDown){
counter--;
}
else{
counter++;
}
//setting the text here
if(counter%15==0){ //only 0 when counter equals 0 or 15
countingDown=!countingDown; // starting the other direction at next time
}
干杯
终于。我做到了。菜鸟错误:p
final Timer c=new Timer();
c.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
if (counter <= total && timerHasStarted ) {
runOnUiThread(new Runnable()
{
@Override
public void run()
{
number.setText("" +counter );
// removed counter++;
}
});
if (counter == total && timerHasStarted) {
runOnUiThread(new Runnable()
{
@Override
public void run()
{
number.setText("" +counter);
// removed counter--;
}
});
}
if(countingDown){
countingDown = true;
counter--;
}
else{
counter++;
countingDown = false;
}
//setting the text here
if(counter%15==0){ //only 0 when counter equals 0 or 15
countingDown=!countingDown; // starting the other direction at next time
}
}
}}, 1000, 300);
例如,我想从 1 数到 15,然后从 15 数到 1 并重复该过程...您可以帮我完成吗?我尝试了一切。而不是 if,我尝试了 While,它出于某种原因给出了随机数。这种方法只减到14。它不会完全倒计时。
int counter = 0;
int total = 15;
number = (TextView) this.findViewById(R.id.number);
final Timer c=new Timer();
c.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
if (counter < total && timerHasStarted ) {
runOnUiThread(new Runnable()
{
@Override
public void run()
{
number.setText("" +counter );
counter++;
}
});
}
if (counter <= total && timerHasStarted ) {
runOnUiThread(new Runnable()
{
@Override
public void run()
{
number.setText("" +counter );
counter++;
}
});
if (counter == total && timerHasStarted) {
countingDown = true;
if(countingDown){
counter--;
}
else{
counter++;
}
//setting the text here
if(counter%15==0){ //only 0 when counter equals 0 or 15
countingDown=!countingDown; // starting the other direction at next time
}
}
}}}, 1000, 300);
timerHasStarted = true;
您没有提供完整的代码,但是
你的逻辑有一个很大的 flaw:first 计数器是 0 所以第一个 if 会把它加起来,因为它小于 15......它一直这样做直到它达到 15 然后它什么都不做......但是这是第二个,如果现在计数器是 15,它被执行,使计数器再次回到 14,所以它在 14 和 15 之间改变整个时间从它第一次到达的点开始。
这是我的解决方案:
有一个像 countingDown 这样的布尔值,并在开始时将其设置为 false,如果它达到 15,则将其设置为 true。
如果 countingDown 是 true/false,检查这个布尔值要做什么。
喜欢:
if(countingDown){
counter--;
}
else{
counter++;
}
//setting the text here
if(counter%15==0){ //only 0 when counter equals 0 or 15
countingDown=!countingDown; // starting the other direction at next time
}
干杯
终于。我做到了。菜鸟错误:p
final Timer c=new Timer();
c.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
if (counter <= total && timerHasStarted ) {
runOnUiThread(new Runnable()
{
@Override
public void run()
{
number.setText("" +counter );
// removed counter++;
}
});
if (counter == total && timerHasStarted) {
runOnUiThread(new Runnable()
{
@Override
public void run()
{
number.setText("" +counter);
// removed counter--;
}
});
}
if(countingDown){
countingDown = true;
counter--;
}
else{
counter++;
countingDown = false;
}
//setting the text here
if(counter%15==0){ //only 0 when counter equals 0 or 15
countingDown=!countingDown; // starting the other direction at next time
}
}
}}, 1000, 300);