我需要从存储在 res/drawables 中的图像中将图像设置到我的 ImageView 中

I need to set an Image into my ImageView from images stored in my res/drawables

所以我是 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);

到目前为止,这是我最初开始使用的代码。我还将 link 我检查解决方案的页面。

资源机制不支持 drawable 目录中的子文件夹。您不能在 res/drawable 包下创建子文件夹。

因此,无论您尝试使用上述逻辑做什么,您的代码都不会执行以提供您想要的结果。

您可以做的是:

访问您的内部 storage/External 存储 -> 在用户设备的图片目录下创建单独的文件夹 -> 创建子文件夹 -> 将这些图像存储在其特定文件夹下 -> 通过从内部存储访问它们来执行您的逻辑,并且 not 来自 res/drawable/[folder_name] 结构。

更新:

您提到您有静态图像,而不是任何其他服务器上可用的图像。因此,将这些图像添加到可绘制文件夹中。然后使用您的代码访问文件管理器并将这些图像添加到您需要的特定子文件夹下的用户图片文件夹中。然后你想显示它们的地方,从文件管理器的那些特定子文件夹调用 - 设备的图片目录。

您可以按照以下步骤为您的可绘制图像使用不同的文件夹,

创建您的 Res 文件夹

  1. 使用 "s"
  2. 在名为 drawables 的资源中创建一个文件夹
  3. 通过选择新文件夹并右键单击->新建->文件夹->Res 文件夹来创建新的子文件夹(命名第一个 german_shepherd 等...)

将子文件夹创建为 Res 文件夹后,现在您需要在每个子文件夹中添加一个名为 drawable 的文件夹。你的最终 res 文件夹应该是这样的

  1. 最后一步是重新同步您的 app/build。gradle file.you 应该看到下面的块在 android 中添加(您的 gradle 可能不会自动添加,在这种情况下您应该手动添加)

    源集{ 主要的 { res.srcDirs = ['src/main/res', 'src/main/res/drawables/boxer', 'src/main/res/drawables/german_shepherd', ] } }

在代码中使用资源

完成所有这些步骤后,您应该能够通过调用 setImageDrawable 来简单地设置图像 imageView.setImageDrawable(R.drawable.image1);

说明 这基本上是在设置多个资源,以便编译器识别它们并将它们添加到您的 R.class