单击后显示 imageview 稍等片刻然后再次隐藏 [Android]

Show imageview after click wait a moment then hide again [Android]

我试图在用户单击按钮后显示一些图像视图,然后等待一段时间让用户查看哪个是正确的按钮,然后再次将其隐藏。像这样:

用户点击给出答案的按钮

-> 通过将图像视图的可见性设置为可见来更新分数并向用户显示正确答案

-> 稍等片刻,让用户能够看到哪个是正确答案

-> 再次隐藏图像视图并加载新问题。

到目前为止我有这个:

private void gameLoop(){
    new Thread(new Runnable() {
        @Override
        public void run() {
            while (isRunning) {
                if (time > 0) {
                    sleepmillis(1000);
                    time--;
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            textViewTime.setText(time + " sec.");
                        }
                    });
                } else
                    finishGame();
            }
        }
    }).start();
}

private void sleepmillis(int millis) {
    try {
        Thread.sleep(millis);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

@Override
public void onClick(View view) {
    int givenAnswer = -1;
    switch (view.getId()) {
        case R.id.buttonFirst:
        case R.id.imageViewFirst:
            givenAnswer = 0;
            break;
        case R.id.buttonSecond:
        case R.id.imageViewSecond:
            givenAnswer = 1;
            break;
        case R.id.buttonThird:
        case R.id.imageViewThird:
            givenAnswer = 2;
            break;
        case R.id.buttonFourth:
        case R.id.imageViewFourth:
            givenAnswer = 3;
            break;
    }
    processAnswer(givenAnswer);
}

private void processAnswer(int givenAnswer){
    if (givenAnswer == answers[4]){
        score += 5000;
        correctAnswersInARow++;
        if (correctAnswersInARow == 3)
            score += 15000;
        if (correctAnswersInARow == 6){
            score += 30000;
            correctAnswersInARow = 0;
        }
    }
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            textViewScore.setText("Score: " + score);
        }
    });
    showCorrectAnswer();
    answers = gameData.getAnswers();
    updateAnswers();
}

private void showCorrectAnswer(){
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            switch (answers[4]){
                case 0:
                    ivCorrectFirst.setVisibility(View.VISIBLE);
                    break;
                case 1:
                    ivCorrectSecond.setVisibility(View.VISIBLE);
                    break;
                case 2:
                    ivCorrectThird.setVisibility(View.VISIBLE);
                    break;
                case 3:
                    ivCorrectFourth.setVisibility(View.VISIBLE);
            }
        }
    });
    sleepmillis(400);
    hideCorrectAnswers();
}

private void hideCorrectAnswers(){
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            ivCorrectFirst.setVisibility(View.INVISIBLE);
            ivCorrectSecond.setVisibility(View.INVISIBLE);
            ivCorrectThird.setVisibility(View.INVISIBLE);
            ivCorrectFourth.setVisibility(View.INVISIBLE);
        }
    });
}

所以重要的部分是在 showCorrectAnswer 方法中,我尝试在其中执行我在此处解释的内容。尽管该应用程序在加载新问题之前会等待 400 毫秒,但它不会显示正确答案。

imageView.setVisibility(View.VISIBLE);
new Handler().postDelayed(new Runnable() {
      @Override
      public void run() {
          imageView.setVisibility(View.INVISIBLE);
      }
    }, ms);

ms 是以毫秒为单位的持续时间。