【问题标题】:I need to set an Image into my ImageView from images stored in my res/drawables我需要从存储在我的 res/drawables 中的图像中将图像设置到我的 ImageView
【发布时间】:2020-06-07 06:27:51
【问题描述】:

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

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

【问题讨论】:

    标签: java android android-imageview


    【解决方案1】:

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

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

    你可以做的是:

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

    更新:

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

    【讨论】:

    • 所以您的解决方案是我必须在安装期间将这些图像下载到我正在使用的设备中,然后参考设备内部创建的目录以使用该文件夹?
    【解决方案2】:

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

    创建您的资源文件夹

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

    在您将子文件夹创建为 Res 文件夹后,现在您需要在每个文件夹中添加一个名为 drawable 的文件夹。您的最终 res 文件夹应如下所示

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

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

    在代码中使用资源

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

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

    【讨论】:

    • 好的,但这是否意味着我可以在其中存储我的图像文件?不对吧?
    • 是的,您可以将图像存储在其中并使用 R.drawable.imageName 来调用它们,但请注意编译器会将您的所有子文件夹合并到一个大的可绘制 Java 资源(R. drawable) 所以即使在子文件夹中你也必须使用唯一的名称,但除此之外你可以使用你的图像
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多