如何为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次单击按钮之后才开始发生。
答案 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);
}
}
谢谢大家的回应。