【问题标题】:How to set the image from drawable dynamically in android?如何在android中动态设置可绘制的图像?
【发布时间】:2012-07-29 01:43:24
【问题描述】:

我将与项目相关的图像存储在可绘制文件夹中。此外,我将图像名称存储在字符串变量中,并且动态地尝试将这些图像设置为图像视图。但是图像没有显示。请在这方面帮助我。

我的代码:

int res = getResources().getIdentifier(imagename, "drawable", this.getPackageName());
imageview= (ImageView)findViewById(R.id.imageView);
imageview.setImageResource(res);

在上面的代码中,“imagename”是包含图片名称的字符串变量。

提前致谢

【问题讨论】:

    标签: android


    【解决方案1】:

    试试这个:

    String uri = "@drawable/myresource";  // where myresource (without the extension) is the file
    
    int imageResource = getResources().getIdentifier(uri, null, getPackageName());
    
    imageview= (ImageView)findViewById(R.id.imageView);
    Drawable res = getResources().getDrawable(imageResource);
    imageView.setImageDrawable(res);
    

    【讨论】:

    • 嗨,我试过你的代码,它显示错误为 android.content.res.Resources$NotFoundException: Resource ID #0x0 at line Drawable res = getResources().getDrawable(imageResource);请帮助我
    • 您需要更改图片名称的 uri。喜欢“@drawable/MYIMAGENAME.extension”
    • image_url 包含图像名称为“image.png”
    • 它在没有 png 扩展名的情况下对我有用,但扩展名却给了我错误。所以你可以尝试不扩展
    • 为什么扩展还在 cmets 中?我浪费了时间,直到我通过删除扩展名让它工作。即使我赞成你的答案,请编辑它。 Pi 日快乐 :)
    【解决方案2】:

    这里我将frnd_inactive 图像从drawable 设置为图像

     imageview= (ImageView)findViewById(R.id.imageView);
     imageview.setImageDrawable(getResources().getDrawable(R.drawable.frnd_inactive));
    

    【讨论】:

    • getDrawable(int) 已弃用。您应该改用 getDrawable(int, Theme)。
    【解决方案3】:
    imageview= (ImageView)findViewById(R.id.imageView);
    imageview.setImageResource(R.drawable.mydrawable);
    

    【讨论】:

    • 加上这个答案很简单
    • 动态如何?文件名在这里看起来是静态的。
    【解决方案4】:

    试试这个动态代码

    String fnm = "cat"; //  this is image file name
    String PACKAGE_NAME = getApplicationContext().getPackageName();
    int imgId = getResources().getIdentifier(PACKAGE_NAME+":drawable/"+fnm , null, null);
    System.out.println("IMG ID :: "+imgId);
    System.out.println("PACKAGE_NAME :: "+PACKAGE_NAME);
    //    Bitmap bitmap = BitmapFactory.decodeResource(getResources(),imgId);
    your_image_view.setImageBitmap(BitmapFactory.decodeResource(getResources(),imgId));
    

    在上面的代码中,您将需要 Image-file-Name 和 Image-View 对象您都拥有。

    【讨论】:

    • 非常感谢...此代码运行良好,您节省了我很多时间。
    • 谢谢。这对我很有用: int imgId = getResources().getIdentifier(PACKAGE_NAME+":drawable/"+fnm , null, null);
    • 非常感谢。工作 3 小时后,您的代码修复了我的错误。
    【解决方案5】:

    请参阅下面的代码,这对我有用

    iv.setImageResource(getResources().getIdentifier(
                    "imagename", "drawable", "com.package.application"));
    

    【讨论】:

    • 使用 context.getPackageName() 作为包名
    【解决方案6】:

    这对我有用(不要使用图像的扩展名,只使用名称):

    String imagename = "myImage";
    int res = getResources().getIdentifier(imagename, "drawable", this.getPackageName());
    imageview= (ImageView)findViewById(R.id.imageView);
    imageview.setImageResource(res);
    

    【讨论】:

      【解决方案7】:

      这是目前在每部手机中都能使用的最佳方式。这些答案中的大多数已被弃用或需要 API >= 19 或 22。 您可以使用片段代码或活动代码取决于您的需要。

      片段

      //setting the bitmap from the drawable folder
      Bitmap bitmap= BitmapFactory.decodeResource(getActivity().getResources(), R.drawable.my_image);
      
      //set the image to the imageView
      imageView.setImageBitmap(bitmap);
      

      活动

      //setting the bitmap from the drawable folder
      Bitmap bitmap= BitmapFactory.decodeResource(MyActivity.this.getResources(), R.drawable.my_image);
      
      //set the image to the imageView
      imageView.setImageBitmap(bitmap);
      

      干杯!

      【讨论】:

        【解决方案8】:

        像这样设置ImageView:imageView.setImageResource(R.drawable.image)

        【讨论】:

          【解决方案9】:
          imageView.setImageResource(R.drawable.picname);
          

          【讨论】:

            【解决方案10】:

            getDrawable() 已弃用,所以试试这个

            imageView.setImageResource(R.drawable.fileName)
            

            【讨论】:

            • 这个解决方案对我有用。要添加,如果您需要清除 ImageView,只需:imageView.setImageResource(android.R.color.transparent)stackoverflow.com/a/8243184/1657502
            【解决方案11】:

            首先让您的图片名称为myimage。所以你要做的就是去Drawable并保存图片名称myimage。

            现在假设您只知道图像名称并且需要访问它。使用下面的sn-p来访问它,

            您所做的是正确的,请确保您保存了要在编码中使用的图像名称。

            public static int getResourceId(Context context, String name, String resourceType) {
                return context.getResources().getIdentifier(toResourceString(name), resourceType, context.getPackageName());
            }
            
            private static String toResourceString(String name) {
                return name.replace("(", "")
                           .replace(")", "")
                           .replace(" ", "_")
                           .replace("-", "_")
                           .replace("'", "")
                           .replace("&", "")
                           .toLowerCase();
            }
            

            除此之外,您还应确保没有空格和区分大小写

            【讨论】:

              【解决方案12】:

              从 API 22 开始,getResources().getDrawable() 已弃用(另请参阅 Android getResources().getDrawable() deprecated API 22)。这是一种动态设置图片资源的新方法:

              String resourceId = "@drawable/myResourceName"; // where myResourceName is the name of your resource file, minus the file extension
              int imageResource = getResources().getIdentifier(resourceId, null, getPackageName());
              Drawable drawable = ContextCompat.getDrawable(this, imageResource); // For API 21+, gets a drawable styled for theme of passed Context
              imageview = (ImageView) findViewById(R.id.imageView);
              imageview.setImageDrawable(drawable);
              

              【讨论】:

                【解决方案13】:

                这是在 Kotlin 中的操作方法,在循环内 i:

                从rfsbraz 的回答中重复使用的代码

                    val uri = "@drawable/pic_top${i+1}"
                    val imageResource = activity.resources.getIdentifier(uri, null, activity.packageName)
                
                    val res = activity.getResources().getDrawable(imageResource)
                    holder.view.imgDigit.setImageDrawable(res)
                

                【讨论】:

                • 活动应该是什么?
                【解决方案14】:

                getDrawable() 已弃用。 现在你可以使用

                imageView.setImageDrawable(ContextCompat.getDrawable(this,R.drawable.msg_status_client_read)) 
                

                【讨论】:

                  【解决方案15】:

                  这对我来说很好。

                  final R.drawable drawableResources = new R.drawable(); 
                  final Class<R.drawable> c = R.drawable.class;
                  final Field[] fields = c.getDeclaredFields();
                  for (int i=0; i < fields.length;i++) 
                  {
                       resourceId[i] = fields[i].getInt(drawableResources);  
                      /* till here you get all the images into the int array resourceId.*/
                  }
                  imageview= (ImageView)findViewById(R.id.imageView);
                  if(your condition)
                  {
                     imageview.setImageResource(resourceId[any]);
                  }
                  

                  【讨论】:

                  • resourceId[i] = fields[i].getInt(drawableResources);在这一行中出现错误原因:java.lang.IllegalArgumentException:不是原始字段
                  【解决方案16】:
                  int[] phptr=new int[5];
                  

                  将图像指针添加到数组

                  for(int lv=0;lv<3;lv++)
                      {
                          String id="a"+String.valueOf(lv+1);
                          phptr[lv]= getResources().getIdentifier(id, "drawable", getPackageName());
                      }
                  
                  for(int loopvariable=0;loopvariable<3;loopvariable++) 
                      {
                          et[loopvariable] = findViewById(p[loopvariable]);
                      }
                  
                  
                  
                  for(int lv=0;lv<3;lv++)
                      {
                          et[k].setImageResource(phptr[k]);
                      }
                  

                  【讨论】:

                    【解决方案17】:
                    ImageView imageView=findViewById(R.id.imageView)
                    

                    如果您在可绘制文件夹中有图像,则使用

                    imageView.setImageResource(R.drawable.imageView)
                    

                    如果你有 uri 并想在 imageView 中显示它,那么使用

                    imageView.setImageUri("uri")
                    

                    如果您有位图并想在 imageView 中显示它,请使用

                    imageView.setImageBitmap(bitmap)
                    

                    注意:- 1. imageView.setImageDrawable() 现在在 java 中已弃用 2. 如果图像 uri 来自 firebase 或任何其他在线链接,则使用

                        Picasso.get()
                        .load("uri")
                        .into(imageView)
                    

                    (https://github.com/square/picasso)

                    或使用

                    Glide.with(context)
                                .load("uri")
                                .into(imageView)
                    

                    (https://github.com/bumptech/glide)

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2014-06-11
                      • 2013-04-28
                      • 2021-05-04
                      • 1970-01-01
                      • 1970-01-01
                      • 2018-02-07
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多