动态使用setImageDrawable在ImageView中设置图像

Aru*_*run 113 android android-widget

我正在动态生成数据库中的字符串,该字符串与drawable文件夹中的图像名称相同.

现在我想设置动态ImageView使用的值setImageDrawable(R.id.StringGenerated).

有什么建议..

Kin*_* RV 182

试试这个,

int id = getResources().getIdentifier("yourpackagename:drawable/" + StringGenerated, null, null);
Run Code Online (Sandbox Code Playgroud)

这将返回您要访问的drawable的id ...然后您可以通过执行以下操作在imageview中设置图像

imageview.setImageResource(id);
Run Code Online (Sandbox Code Playgroud)

  • 但是,使用setImageResource()"在UI线程上进行Bitmap读取和解码,这可能会导致延迟打嗝...考虑使用setImageDrawable()或setImageBitmap()." _(Android文档)_ (12认同)
  • 你也可以通过简单地使用:R.drawable.filemane获得id (5认同)

Nik*_*ddy 94

Drawable image = ImageOperations(context,ed.toString(),"image.jpg");
            ImageView imgView = new ImageView(context);
            imgView = (ImageView)findViewById(R.id.image1);
            imgView.setImageDrawable(image);
Run Code Online (Sandbox Code Playgroud)

要么

setImageDrawable(getResources().getDrawable(R.drawable.icon));
Run Code Online (Sandbox Code Playgroud)

  • 不推荐使用getDrawable(R.drawable.icon) (3认同)

jlo*_*pez 76

我个人更喜欢使用这样的方法setImageResource().

ImageView myImageView = (ImageView)findViewById(R.id.myImage);
myImageView.setImageResource(R.drawable.icon);
Run Code Online (Sandbox Code Playgroud)


Gre*_*son 25

资源可绘制名称不存储为字符串,因此您必须将字符串解析为构建期间生成的整数常量.您可以使用Resources该类将字符串解析为该整数.

Resources res = getResources();
int resourceId = res.getIdentifier(
   generatedString, "drawable", getPackageName() );
imageView.setImageResource( resourceId );
Run Code Online (Sandbox Code Playgroud)

这会将生成的字符串解析为ImageView可用于加载正确图像的整数.

或者,您可以使用id Drawable手动加载,然后使用该drawable而不是资源ID设置图像.

Drawable drawable = res.getDrawable( resourceId );
imageView.setImageDrawable( drawable );
Run Code Online (Sandbox Code Playgroud)


Mer*_*chy 14

您可以尝试使用此代码:

ImageView ImgView = (ImageView)findViewById(R.id.ImgView);
ImgView.setImageResource(R.drawable.myicon);
Run Code Online (Sandbox Code Playgroud)


Ahm*_*lan 13

就像这个答案一样简单:

Drawable myDrawable = getResources().getDrawable(R.drawable.pic);
imageview.setImageDrawable(myDrawable);
Run Code Online (Sandbox Code Playgroud)


res*_*all 8

这有效,至少在Android API 15中有效

ImageView = imgv;
Resources res = getResources(); // need this to fetch the drawable
Drawable draw = res.getDrawable( R.drawable.image_name_in_drawable );
imgv.setImageDrawable(draw);
Run Code Online (Sandbox Code Playgroud)

您可以使用setImageResource(),但文档指定 "在UI线程上进行Bitmap读取和解码,这可能会导致延迟打嗝...考虑使用setImageDrawable()或setImageBitmap()." 如chetto所述


Vla*_*ero 5

如果您无法在不是 Activity 的类中获取这样的 Resources 对象,则必须为 getResources() 添加 getContext() 方法

ImageView image = (ImageView) v.findViewById(R.id.item_image);
int id = getContext().getResources().getIdentifier(imageName, "drawable", getContext().getPackageName());
image.setImageResource(id);
Run Code Online (Sandbox Code Playgroud)


por*_*der 5

发布的所有答案均不适用于今天。例如,不赞成使用getDrawable()。这是更新的答案,干杯!

ContextCompat.getDrawable(mContext, drawable)
Run Code Online (Sandbox Code Playgroud)

从记录的方法

公共静态最终android.graphics.drawable.Drawable getDrawable(@NotNull android.content.Context上下文,
@ android.support.annotation.DrawableRes int id


lxk*_*vlk 5

imageView.setImageDrawable(getResources().getDrawable(R.drawable.my_drawable));