Правильная задержка во время выполнения Java кода
Я решил написать свою игру на java (текстовый квест). По задумке когда игра дает вам право выбора(три кнопки с разными вариантами), то после нажатия кнопки должны моментально исчезнуть и через 1 секунду появиться текст, через еще 2 секунды еще один кусок текста (и так далее). То есть создать эффект появления текста. Я попробовал сделать это таким образом:
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
btn1.setVisibility(View.INVISIBLE);
btn2.setVisibility(View.INVISIBLE);//скрываем кнопки
btn3.setVisibility(View.INVISIBLE);
try {
Tread.sleep(1000)
} catch(InterruptedException e){
}
textofgamestory1.setText(R.string.chapter1part1text2gv1);//меняем текст
textofgamestory1.setVisibility(View.VISIBLE);//делаем его видимым
try {
Tread.sleep(1000)
} catch(InterruptedException e){
}
textofgamestory2.setText(R.string.chapter1part1text3gv1);
textofgamestory2.setVisibility(View.VISIBLE);
но, при проверки этого кода, при нажатии на кнопку, кнопки не исчезали сразу, а ждали 1 секунду а потом исчезали вмести с появлением самого текста целиком, а это не то что мне нужно. Надеюсь кто нибудь знает как правильно сделать такую задержку, заранее спасибо.
Ответы (1 шт):
- Не используйте
Tread.sleepв главном потоке при программировании под Андроид. Странно, что система не убила Ваше приложение. Никакие паузы тут недопустимы. Для решения Вашей проблемы простейший метод (без сторонних библиотек):
//поле класса активности / фрагмента Handler h; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); h = Handler(Looper.getMainLooper()); ... } //далее в пределах метода (onClick, например) Runnable r = new Runnable() { public void run() { // Что нужно сделать после задержки, Ваш код } }; h.postDelayed(r, 1000); //с задержкой 1000 миллисекунд //отписаться надо не забыть! @Override protected void onPause() { h.removeCallbacksAndMessages(null); super.onPause(); }