Функция сна в программе Android
Возникли проблемы с переводом моей программы в спящий режим. Когда я нажимаю btnStart, происходит случайное переключение изображений на 12 кнопок ImageButtons. Затем я хочу сделать паузу в течение 5 секунд, а затем изменить первую кнопку ImageButton на другую.
Мой код выглядит следующим образом, сейчас он сразу останавливается при нажатии кнопки...
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Collections.shuffle(pic);
int time=1;
press=true;
pic.get(0).setImageDrawable(getResources().getDrawable(R.drawable.memgreen));
pic.get(1).setImageDrawable(getResources().getDrawable(R.drawable.memgreen));
pic.get(2).setImageDrawable(getResources().getDrawable(R.drawable.memred));
pic.get(3).setImageDrawable(getResources().getDrawable(R.drawable.memred));
pic.get(4).setImageDrawable(getResources().getDrawable(R.drawable.memblue));
pic.get(5).setImageDrawable(getResources().getDrawable(R.drawable.memblue));
pic.get(6).setImageDrawable(getResources().getDrawable(R.drawable.memwhite));
pic.get(7).setImageDrawable(getResources().getDrawable(R.drawable.memwhite));
pic.get(8).setImageDrawable(getResources().getDrawable(R.drawable.mempurple));
pic.get(9).setImageDrawable(getResources().getDrawable(R.drawable.mempurple));
pic.get(10).setImageDrawable(getResources().getDrawable(R.drawable.memyellow));
pic.get(11).setImageDrawable(getResources().getDrawable(R.drawable.memyellow));
try {
Thread.sleep(5000);
pic.get(0).setImageDrawable(getResources().getDrawable(R.drawable.coin));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
2 ответа
Решение
Ну, если вы хотите, чтобы пользовательский интерфейс оставался отзывчивым, вы не можете заблокировать поток пользовательского интерфейса с помощью Thread.sleep
там.
Создайте новую тему, затем спите. После сна запустите метод для изменения вида, отображаемого в потоке пользовательского интерфейса.
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
runOnUiThread(new Runnable() {
@Override
public void run() {
pic.get(0).setImageDrawable(getResources().getDrawable(R.drawable.coin));
}
});
}
}).start();
Создайте массив изображений и установите обработчик. Использование postDelayed не блокирует поток.
int[] imageArray = { R.drawable.img_1, R.drawable.img_2,
R.drawable.img_3, R.drawable.img_4,
R.drawable.img_5};
Handler handler = new Handler();
Runnable runnable = new Runnable() {
int i = 0;
public void run() {
imageView1.setImageResource(imageArray[i]);
i++;
if (i > imageArray.length - 1) {
i = 0;
}
handler.postDelayed(this, 5000); //displays every 5 seconds
}
};
handler.postDelayed(runnable, 5000);