如何创建一个计时器,等待用户的按钮单击动作3秒钟,否则打算进行其他活动?

时间:2019-04-13 17:18:49

标签: java android button

如何为Android创建等待一段时间的Java代码,例如3到5秒,以便用户执行按钮单击,只需更改其xy坐标并增加得分即可,否则意在进行其他活动。

我已经尝试通过引用此SO答案[How to pause / sleep thread or process in Android?来实现它,但是即使我在指定的延迟时间内单击,代码也会在5-6次按钮单击后继续进行其他活动。这是代码-

btn.setOnClickListener(new View.OnClickListener() 
{
        @Override
        public void onClick(View v) 
{
           score++;
            scr=String.valueOf(score);
            scoredisp.setText(scr);
           int xval=xvalue();
            int yval=yvalue();
            btn.setX(xval);
            btn.setY(yval);
            Handler handler = new Handler();
            handler.postDelayed(new Runnable() {
                @Override
                public void run() 
{
                    Intent result = new  Intent(MainActivity.this,com.example.warlock.buttonsquash.result.class);
                    startActivity(result);
                }
            }, 3000);

        }
    });


int xvalue() {
    Random randomGenerator = new Random();
    int xval = randomGenerator.nextInt(850) + 1;
    return xval;
}

int yvalue() {
    Random randomGenerator = new Random();
    int yval = randomGenerator.nextInt(1500) + 1;
    return yval;
}

我只需要单击按钮即可更改按钮坐标并增加得分值,但意图是在5到6次单击按钮之后才开始发生。

4 个答案:

答案 0 :(得分:0)

首先使计时器(处理程序)持续3或5秒钟。当他们通过检查按钮的布尔值是否为true时,否则重定向到另一个活动。希望我能帮助你。

答案 1 :(得分:0)

此代码将使用户在当前活动中等待5秒钟。 届时,用户可以单击该按钮,然后将其定向到其他活动。

在您的onCreate()中使用此代码

final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
  @Override
  public void run() {
    //Do something after 5sec.
   // Intent to other activity from there.
  }
}, 5000);

希望这对您有所帮助。

答案 2 :(得分:0)

请尝试以下操作:

        findViewById(R.id.theButton).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                theButtonWasClicked = true;
            }
        });

        final int FIVE_SECONDS = 5000;

        final Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                if (theButtonWasClicked) {
                    Log.d("TheTag", "5 seconds passed with button clicked!");
                    theButtonWasClicked = false;
                } else {
                    Log.d("TheTag", "5 seconds passed with NO button click!");
                    timer.cancel();
                }
            }
        }, FIVE_SECONDS, FIVE_SECONDS);

如果用户在5秒钟内没有单击,它将执行您想要的操作,或者它将持续等待直到下一个5秒钟的间隔,而没有单击(这是您想要的吗?)

答案 3 :(得分:0)

我自己找到了一种解决方法。您可能从问题中了解到,最初的问题是多个处理程序的延迟会在连续5-6次单击按钮后导致多个意图。我引用了这个答案[How to change/reset handler post delayed time?,并编写了stop()和restart()fn代码,它解决了我的错误。

附加最终代码以供参考-

public class MainActivity extends AppCompatActivity {

Button btn; int score; String scr; TextView scoredisp; boolean click;
public static Handler myHandler = new Handler();
private static final int TIME_TO_WAIT = 700;
Runnable myRunnable;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btn=(Button) findViewById(R.id.imgbtn);
    scoredisp=(TextView)findViewById(R.id.score);
    click=false;


    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            stop();
            score++;
            scr=String.valueOf(score);
            scoredisp.setText(scr);

            Random random = new Random();
           int color = Color.argb(255, random.nextInt(256), random.nextInt(256), random.nextInt(256));
           btn.setBackgroundColor(color);

           int xval=xvalue();
            int yval=yvalue();
            //int butang=butangle();
           // btn.setRotation(butang);
            btn.setX(xval);
            btn.setY(yval);
            click=false;
            checkvalue();
            restart();
        }

    });



}

 int xvalue() {
    Random randomGenerator = new Random();
    int xval = randomGenerator.nextInt(850) + 1;
    return xval;
}

int yvalue() {
    Random randomGenerator = new Random();
    int yval = randomGenerator.nextInt(1500) + 1;
    return yval;
}

int butangle() {
    Random randomGenerator = new Random();
    int butang = randomGenerator.nextInt(360) + 1;
    return butang;
}


public void checkvalue() {
    myRunnable = new Runnable() {
        @Override
        public void run() {
            if(!click) {
                Intent result = new Intent(MainActivity.this, com.example.warlock.buttonsquash.result.class);
                startActivity(result);
            }
        }
    };

}

public void start() {
    myHandler.postDelayed(myRunnable, TIME_TO_WAIT);
}

public void stop() {
    myHandler.removeCallbacks(myRunnable);
}

public void restart() {
    myHandler.removeCallbacks(myRunnable);
    myHandler.postDelayed(myRunnable, TIME_TO_WAIT);
}
}

谢谢大家的回应。