(View.INVISIBLE), прежде чем Timer.sleep () не работает - PullRequest
0 голосов
/ 26 мая 2018

У меня есть несколько кнопок, которые я хочу сделать НЕВИДИМЫМ на короткое время, а затем снова сделать их ВИДИМЫМИ.Функция (View.INVISIBLE) до Timer.sleep () не работает.Я еще не понял это.Есть идеи?Спасибо, Стив

private void commonBtnHandler(Button btn) {
    try {
        btn.setVisibility(View.INVISIBLE);
        Thread.sleep(250);
        btn.setVisibility(View.VISIBLE);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Ответы [ 4 ]

0 голосов
/ 05 июня 2018

Решая эту проблему по-другому, я не скрывал кнопку, но временно изменил цвет с помощью MotionEvent в setOnTouchListener.При нажатии кнопка меняет цвет, а после отпускания возвращается к исходному цвету.Прекрасно работает!

    mBtn.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch ( event.getAction() ) {
                case MotionEvent.ACTION_DOWN:
                    mBtn.setBackgroundColor(getResources().getColor(R.color.colorLightOrange));
                    break;
                case MotionEvent.ACTION_UP:
                    mBtn.setBackgroundColor(getResources().getColor(R.color.colorOrange));
                    break;
            }
            return true;
        }
    });
0 голосов
/ 28 мая 2018
 btn.setVisibility(View.INVISIBLE);
     new Thread() {
     public void run() {
            try {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                     btn.setVisibility(View.VISIBLE);
                    }
                });
                Thread.sleep(250);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
    }
}.start();

всегда помещайте runOnUiThread, когда нужно изменить пользовательский интерфейс во время выполнения, это помогает вам.

0 голосов
/ 28 мая 2018

Спасибо за все введенные данные.

Я перепробовал все предложения с задержкой в ​​3000 миллисекунд, но все еще не видел мигания.

Кроме того, мне было интересно, блокировал ли я пользовательский интерфейснить.Я думал, что INVISIBLE завершится до того, как sleep () вступит в силу.

Резюме: я написал цикл, чтобы сделать вызов 10 раз.Задержка, похоже, игнорируется во всех случаях.Я ценю помощь каждого.Похоже, мне нужно переосмыслить, как это должно работать.Я не думаю, что это будет сильно отличаться от того, как программист игры будет обеспечивать синхронные операции.

0 голосов
/ 26 мая 2018

Вы не должны делать Thread.sleep() в пользовательском интерфейсе / основном потоке.Это приведет к зависанию пользовательского интерфейса & ANR

Попробуйте:

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

Также 250 ms это очень небольшое количество времени.

...