Так что я новичок в Android, и в настоящее время я застрял с проблемой, касающейся динамической генерации изображений в моем представлении изображений.

В настоящее время я сохранил некоторые изображения в своей папке res / drawables в разных подпапках. Итак, структура файла выглядит следующим образом

 Drawables/
     german_shepherd/
           gs_1.jpg
           gs_2.jpg
           gs_3.jpg
     boxer/
           boxer_1.jpg
           boxer_2.jpg
           boxer_3.jpg

Мое приложение работает таким образом, что сначала выбирается случайная порода, программа просматривает назначенную папку для этой породы, а затем случайным образом выбирает одно изображение из этого списка файлов изображений.

Я пытаюсь загрузить это случайно выбранное изображение в просмотр изображений .

Я пробовал кучу решений из других результатов переполнения стека, но независимо от того, что я пробовал, будь то использование BitMap или Drawable, изображение все равно не отображается на моем экране.

String[] breeds = getResources().getStringArray(R.array.breeds);
        randInt = (int)(Math.round(Math.random() * 20));

        String folderPath = "res/drawable/";
        String filePath = "";

        switch (breeds[randInt]){

            case "Australian Terrier":
                Log.i("Breed", breeds[randInt]);
                filePath = folderPath+"at/at_"+randInt+".jpg";
                Log.i("Image", filePath);

            case "Beagle":
                Log.i("Breed", breeds[randInt]);
                filePath = folderPath+"beagles/b_"+randInt+".jpg";
                Log.i("Image", filePath);
                break;

            case "Boxer":
                Log.i("Breed", breeds[randInt]);
                filePath = folderPath+"boxer/boxer_"+randInt+".jpg";
                Log.i("Image", filePath);
                break;

            case "Chihuahua":
                Log.i("Breed", breeds[randInt]);
                filePath = folderPath+"chihuahua/chihuahua_"+randInt+".jpg";
                Log.i("Image", filePath);
                break;

            case "Cockerspaniel":
                Log.i("Breed", breeds[randInt]);
                filePath = folderPath+"cocker_spaniel/cs_"+randInt+".jpg";
                Log.i("Image", filePath);
                break;
            default:
                Log.i("Error", "Not Found");

        }

        final ImageView imageView = findViewById(R.id.questionImage);
        Drawable drawable = Drawable.createFromPath(filePath);
        imageView.setImageDrawable(drawable);

Пока это код, с которого я изначально начал. Я также свяжу страницы, на которых я проверил решения.

0
AiSirachcha21 23 Фев 2020 в 15:20

2 ответа

Лучший ответ

Механизм ресурсов не поддерживает подпапки в каталоге drawable. Вы не можете создавать подпапки в пакете res / drawable.

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

Что вы можете сделать:

Доступ к внутренней / внешней памяти -> создайте отдельную папку в каталоге изображений ваших пользовательских устройств -> . Создайте вложенную папку -> , чтобы сохранить эти изображения в их конкретной папке -> Выполните свою логику доступ к ним из внутреннего хранилища, а не из структуры res / drawable / [имя_папки].

Обновление:

Вы упомянули, что у вас есть статические изображения, а не те изображения, которые доступны на любом другом сервере. Итак, добавьте эти изображения в папку для рисования. Затем с помощью вашего кода получите доступ к файловому менеджеру и добавьте эти изображения в папку с изображениями пользователей в нужной подпапке. Затем, где вы хотите показать их, позвоните из этой конкретной подпапки из файлового менеджера - Каталог картинок устройства.

1
Prajwal W 23 Фев 2020 в 13:01

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

Создайте свои папки Res

  1. создать папку в ресурсах, называемых drawables с "s"
  2. создайте новую подпапку, выбрав новую папку и щелкнув правой кнопкой мыши-> New-> Folder-> Res Folder (назовите первую папку german_shepherd и т. д.) введите описание изображения здесь

После того, как вы создали свои подпапки как Res Folders, теперь вам нужно добавить папку с именем drawable внутри каждой из них. Ваша последняя папка res должна выглядеть следующим образом

enter image description here

  1. Последний шаг - повторная синхронизация файла app / build.gradle . Вы должны увидеть добавленный ниже блок внутри Android (ваш gradle может не добавить его автоматически, в этом случае вы должны добавить его вручную)

    sourceSets { основной { res.srcDirs = ['src / main / res', ' SRC / главная / Рез / вводимого коэффициента / боксера , ' SRC / главная / Рез / вводимого коэффициента / german_shepherd ' , ] } }

использовать ресурс в коде

После всех этих шагов вы сможете установить свои изображения, просто вызвав setImageDrawable imageView.setImageDrawable(R.drawable.image1);

< Сильный > Объяснение то, что он делает, в основном устанавливает несколько ресурсов, чтобы компилятор распознал их и добавил их в ваш R.class

0
Chamlal 23 Фев 2020 в 15:14