如何在android中dynamic绘制图像?

我将我的项目相关的图像存储在可绘制文件夹中。 此外,我将图像名称存储在stringvariables中,并dynamic地尝试将这些图像设置为imageview。 但图像不显示。 请在这方面帮助我。

我的代码:

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

在上面的代码中,“imagename”是包含图像名称的stringvariables。

提前致谢

尝试这个:

 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); 

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

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

试试这个dynamic代码

 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)); 

在上面的代码中,您将需要两个图像文件名称和图像查看对象。

看下面的代码这是为我工作

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

这是在今天的每一个电话的最佳方式。 大多数这些答案已被弃用,或需要一个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); 

干杯!

这适用于我(不使用图像的扩展名,只是名称):

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

首先让我们把你的图片名称叫做myimage 。 所以你要做的是去Drawable并保存图像名称myimage

现在假设你只知道图像名称,你需要访问它。 使用下面的代码段来访问它,

你所做的是正确的,确保你保存的图像名称将在编码中使用。

 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(); } 

除此之外,你应该确保没有空的空间和大小写敏感

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

 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); 

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

 imageView.setImageResource(R.drawable.fileName) 

这对我来说很好。

 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]); } 

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

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