Как изменить код, чтобы слайд-шоу изображений в Android? - PullRequest
1 голос
/ 27 марта 2019

Я пытаюсь сделать слайд-шоу из нескольких изображений при создании приложения для Android. Я использую этот код ниже

final int[] array = {R.drawable.cow_1, R.drawable.cow_2, R.drawable.cow_3, R.drawable.cow_4};
for (int i = 0; i < 4; i++){
    final int finalI = i;
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {                                          
            animal_image.setImageResource(array[finalI]);
        }
    }, 4000);
}

Проблема, с которой я сталкиваюсь, заключается в том, что я не получаю слайд-шоу изображений один за другим, вместо этого код показывает последнее изображение непосредственно после первого. Есть некоторая проблема с кодом, пожалуйста, помогите мне исправить это.

Ответы [ 2 ]

1 голос
/ 27 марта 2019

Что вы делаете с кодом, так это то, что он создает Handler для каждого изображения и устанавливает задержку на 4 секунды.Цикл for будет выполняться мгновенно для каждой итерации, а все созданные обработчики будут выполняться через 4 секунды.Это заставляет отображаться последнее изображение, потому что последний обработчик будет работать через несколько миллисекунд после остальных.Чтобы это исправить, вам нужно иметь инкрементный таймер для каждого обработчика.

final int[] array = {R.drawable.cow_1, R.drawable.cow_2, R.drawable.cow_3, R.drawable.cow_4};
for (int i = 0; i < 4; i++){
    final int finalI = i;
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {                                          
            animal_image.setImageResource(array[finalI]);
        }
    }, 4000 * finalI);
}

Используя приведенный выше код, будет отображаться первое изображение, а все остальные изображения будут отображаться после нескольких4 секунды на основе номера изображения (изображение 2 будет отображаться через 4 секунды, изображение 3 будет отображаться через 8 секунд, изображение 4 будет отображаться через 12 секунд и т. д.).

1 голос
/ 27 марта 2019

Попробуйте с ниже

final int[] array = {R.drawable.cow_1, R.drawable.cow_2, R.drawable.cow_3, R.drawable.cow_4};
for (int i = 0; i < 4; i++){
    final int finalI = i;
    Thread.sleep(4000);
     animal_image.setImageResource(array[finalI]);
}

Вы должны добавить try{... }catch(Exception e){} блок.

...