Мне нужно установить изображение в мой ImageView из изображений, хранящихся в моих res / drawables - PullRequest
0 голосов
/ 23 февраля 2020

Так что я новичок в 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);

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

Ответы [ 2 ]

1 голос
/ 23 февраля 2020

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

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

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

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

Обновление:

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

0 голосов
/ 23 февраля 2020

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

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

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

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

enter image description here

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

sourceSets {main {res.srcDirs = ['src / main / res', 'src / main / res / drawables / boxer', 'src / main / res / drawables / german_shepherd ',]}}

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

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

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

...