【问题标题】:Show imageview after click wait a moment then hide again [Android]点击后显示图像视图等待片刻然后再次隐藏[Android]
【发布时间】:2015-06-16 18:05:08
【问题描述】:

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

用户点击按钮给出答案

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

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

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

到目前为止,我有这个:

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 毫秒,但它不会显示正确答案。

【问题讨论】:

  • 不建议在主 UI 线程中休眠。如果你真的必须这样做,请使用处理程序循环器组合

标签: android multithreading imageview show-hide


【解决方案1】:
imageView.setVisibility(View.VISIBLE);
new Handler().postDelayed(new Runnable() {
      @Override
      public void run() {
          imageView.setVisibility(View.INVISIBLE);
      }
    }, ms);

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

【讨论】:

  • 谢谢,这正是我想要的。
猜你喜欢
  • 2011-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多