Изменение фонового изображения андроида каждые 5 секунд

Вопрос:

У меня есть массив изображений, и я хочу менять фоновое изображение каждые 5 секунд с помощью rundom. Я написал код, но у меня есть android.view.ViewRootImpl $ CalledFromWrongThreadException: только исходный поток, создавший иерархию представлений, может коснуться его представлений, Exeption. каково это решение проблемы.

public class StradaContact extends Fragment {

private int[] image_rundow = {

R.drawable.slideone, R.drawable.slidetwo, R.drawable.slidetree

};

private ImageView mapimg;
Reminder claass;

public StradaContact() {

}

public static StradaContact newInstance() {
return new StradaContact();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

View rootView = inflater.inflate(R.layout.strada_contact, container,
false);

claass = new Reminder(5);

return rootView;
}

public class Reminder {

Timer timer;

public Reminder(int seconds) {
timer = new Timer();
timer.schedule(new RemindTask(), seconds * 1000);
}

class RemindTask extends TimerTask {
public void run() {
while (true) {
Random rand = new Random();

int index = rand.nextInt(image_rundow.length);

mapimg.setBackgroundResource(image_rundow[index]);

timer.cancel();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

// Terminate the timer thread
}
}
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

}

}

Ответ №1

Я улучшил ваш класс: 1. Таймер имеет третий параметр – интервал. 2. UI-код для потока пользовательского интерфейса (речь идет о mapimg.setBackgroundResource(…)) Как отменить задачу, которую вы знаете. Вы можете сделать это без посторонней помощи.

public class Reminder {
Timer timer;
public Reminder(int seconds) {
timer = new Timer();
timer.schedule(new RemindTask(), seconds * 1000,5000);
}

class RemindTask extends TimerTask {
public void run() {
getActivity().runOnUiThread(new Runnable() {

@Override
public void run() {
Random rand = new Random();
int index = rand.nextInt(image_rundow.length);
mapimg.setBackgroundResource(image_rundow[index]);
}
});
}
}
}

PS Я не проверяю код. Возможно, у него есть некоторые ошибки

Оцените статью
TechArks.Ru
Добавить комментарий