Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 等待按钮点击一秒钟,如果按钮未点击调用函数_Java_Android - Fatal编程技术网

Java 等待按钮点击一秒钟,如果按钮未点击调用函数

Java 等待按钮点击一秒钟,如果按钮未点击调用函数,java,android,Java,Android,我正在创建一个android应用程序,遇到了一个问题 有12个按钮。按钮将更改颜色,然后用户有一秒钟的时间单击按钮,否则按钮将更改回原始颜色,而另一个按钮将更改颜色 我想重复这一点,直到用户错过了一定数量的按钮点击 我已经发现了如何改变颜色,但是我不知道如何在android中进行无限循环,或者如何等待一秒钟 谢谢你的帮助。这是我第一次尝试android应用程序。您可以通过发布一个可运行的对象,以指定的延迟在处理程序上运行,从而实现计时器。如果不停止它的运行,则执行Runnable。但是,您也可以

我正在创建一个android应用程序,遇到了一个问题

有12个按钮。按钮将更改颜色,然后用户有一秒钟的时间单击按钮,否则按钮将更改回原始颜色,而另一个按钮将更改颜色

我想重复这一点,直到用户错过了一定数量的按钮点击

我已经发现了如何改变颜色,但是我不知道如何在android中进行无限循环,或者如何等待一秒钟


谢谢你的帮助。这是我第一次尝试android应用程序。

您可以通过发布一个可运行的对象,以指定的延迟在处理程序上运行,从而实现计时器。如果不停止它的运行,则执行Runnable。但是,您也可以在此之前停止它的运行:

private static final long ONE_SECOND = 1000L;
private static final int MISS_LIMIT = 10;
int misses = 0;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.my_layout);

    final Handler handler = new Handler();
    final Runnable timer = new Runnable() {
        @Override
        public void run() {
            // user too late: increment miss counter
            if (++misses >= MISS_LIMIT) {
                //TODO miss limit reached
                finish(); // close this activity
            }
        }
    };

    final View btn1 = findViewById(R.id.button1);
    final View btn2 = findViewById(R.id.button2);
    btn1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // change color of other button, and start timer
            btn2.setBackgroundResource(R.color.new_color);
            handler.removeCallbacks(timer);
            handler.postDelayed(timer, ONE_SECOND);
        }
    });
    btn2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // user clicked button in time: restore color and stop timer
            btn2.setBackgroundResource(R.color.orig_color);
            handler.removeCallbacks(timer);
        }
    });
}

首先创建一个类似这样的方法来更改按钮的颜色

public void changeButton(int i){
    switch (i) {
    case 0:
        button0.setClickable(true);
        button0.setBackgroundResource(color1);

        break;
    case 1:
        button0.setClickable(false);
        button0.setBackgroundResource(color2);
        button1.setClickable(true);
        button1.setBackgroundResource(color1);
        break;
    case 2:
        button1.setClickable(false);
        button1.setBackgroundResource(color2);
        button2.setClickable(true);
        button2.setBackgroundResource(color1);
        break;

        .....
    case 11:
        button10.setClickable(false);
        button10.setBackgroundResource(color2);
        button11.setClickable(true);
        button11.setBackgroundResource(color1);
        break;

    default:
        break;
    }
}
然后,您可以实现一个具有一定延迟的Runnable,以便像这样在循环中调用该方法

 Handler handler=new Handler();
    int j=0;
    final Runnable r = new Runnable()
    {
        public void run() 
        {
           changeButton(j);
            j++;
            // next button color change
            if(j<12){
            handler.postDelayed(this, 1000);
            }
            else{
            j=0;
            handler.postDelayed(this, 1000);
            }
        }
    };

    handler.post(r)
Handler=newhandler();
int j=0;
最终可运行r=新可运行()
{
公开募捐
{
转换按钮(j);
j++;
//下一步按钮颜色更改

如果(jCheck):这会更好,它描述了一个定时器使用和其他选项来重复运行一些操作。谢谢你,这对我帮助很大!