如何在android中动态设置可绘制的图像?
Posted
技术标签:
【中文标题】如何在android中动态设置可绘制的图像?【英文标题】:How to set the image from drawable dynamically in 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”是包含图片名称的字符串变量。
提前致谢
【问题讨论】:
【参考方案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)
***.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)
【讨论】:
以上是关于如何在android中动态设置可绘制的图像?的主要内容,如果未能解决你的问题,请参考以下文章