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

我从数据库中动态生成一个字符串,该字符串在 drawable文件夹中具有相同的图像名称。

现在我想使用 setImageDrawable(R.id.StringGenerated)动态地为 ImageView设置这个值。

有什么建议吗。

365624 次浏览
Drawable image = ImageOperations(context,ed.toString(),"image.jpg");
ImageView imgView = new ImageView(context);
imgView = (ImageView)findViewById(R.id.image1);
imgView.setImageDrawable(image);

或者

setImageDrawable(getResources().getDrawable(R.drawable.icon));

“ R”文件无法在应用程序运行时生成。您可以使用其他一些替代方法,例如使用 if-elseswitch-case

资源可绘制名称不存储为字符串,因此必须将字符串解析为生成过程中生成的整数常量。可以使用 Resources类将字符串解析为该整数。

Resources res = getResources();
int resourceId = res.getIdentifier(
generatedString, "drawable", getPackageName() );
imageView.setImageResource( resourceId );

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

或者,您可以使用 ID 手动加载 Drawable,然后使用该绘图工具而不是资源 ID 设置图像。

Drawable drawable = res.getDrawable( resourceId );
imageView.setImageDrawable( drawable );

试试这个,

int id = getResources().getIdentifier("yourpackagename:drawable/" + StringGenerated, null, null);

这将返回您想访问的可绘制内容的 ID..。 然后您可以通过执行以下操作来设置图像视图中的图像

imageview.setImageResource(id);

这是可行的,至少在 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);

您可以使用 setImageResource () ,但是文档按照 chetto 的说明指定了 “在 UI 线程上读取和解码 Bitmap,这会导致延迟打嗝... ... 可以考虑使用 setImageDrawable ()或 setImageBitmap ()。”

我遇到了和你我一样的问题,我用以下方法解决了它:

**IMAGEVIEW**.setImageResource(getActivity()
.getResources()
.getIdentifier("**IMG**", "drawable", getActivity()
.getPackageName()));

答案很简单:

Drawable myDrawable = getResources().getDrawable(R.drawable.pic);
imageview.setImageDrawable(myDrawable);

如果您不能在一个不是 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);

我的项目的一部分,一切工作!)

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
final ModelSystemTraining modelSystemTraining = items.get(position);


int icon = context.getResources().getIdentifier(String.valueOf(modelSystemTraining.getItemIcon()), "drawable", context.getPackageName());


final FragmentViewHolderSystem fragmentViewHolderSystem = (FragmentViewHolderSystem) holder;
final View itemView = fragmentViewHolderSystem.itemView;
//                Set Icon
fragmentViewHolderSystem.trainingIconImage.setImageResource(icon);
//                Set Title
fragmentViewHolderSystem.title.setText(modelSystemTraining.getItemTitle());
//                Set Desc
fragmentViewHolderSystem.description.setText(modelSystemTraining.getItemDescription());

你也可以使用这样的东西:

SetImageDrawable (ActivityCompat.getDrawable (getContext () , ) ;

或使用毕加索:

Picasso.with(getContext()).load(R.drawable.generatedId).into(imageView);

构造一个 POJO.java 类并创建“ structor,getter & setter method”

class POJO{
public POJO(Drawable proImagePath) {
setProductImagePath(proImagePath);
}


public Drawable getProductImagePath() {
return productImagePath;
}


public void setProductImagePath(Drawable productImagePath) {
this.productImagePath = productImagePath;
}
}

然后通过图像可绘制资源将适配器设置为 CustomAdapter.java

    class CustomAdapter extends ArrayAdapter<POJO>{


private ArrayList<POJO> cartList = new ArrayList<POJO>();
public MyCartAdapter(Context context, int resource) {
super(context, resource);
}


public MyCartAdapter(Context context, ArrayList<POJO> cartList) {
super(context, 0, cartList);
this.context = context;
this.cartList = cartList;


}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
/*
*Here you can setup your layout and references.
**/
ImageView productImage = (ImageView) rootView.findViewById(R.id.cart_pro_image);
productImage.setImageDrawable(POJO.getProductImagePath());
}
}

然后通过 ActivityClass.java 传递引用

public class MyCartActivity extends AppCompatActivity{
POJO pojo;
CustomAdapter customAdapter;
ArrayList<POJO> cartList = new ArrayList<POJO>();


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);


customAdapter = new CustomAdapter(this, cartList);


pojo = new POJO(getResources().getDrawable(R.drawable.help_green));


}
}

今天发布的所有答案都不适用。例如,getDrawable ()已被废弃。这里是一个更新的答案,干杯!

ContextCompat.getDrawable(mContext, drawable)

根据文件记载的方法

Public static final android.Graphics.draable. Drawable GetDrawable (@NotNull android.content. Context Context,
注释.DrawableRes int id

SetImageDrawable (GetDrawable (Resource. Drawable.ton _ round _ green)) ;

API 23 Android 6.0

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

您可以尝试使用以下代码:

ImageView ImgView = (ImageView)findViewById(R.id.ImgView);
ImgView.setImageResource(R.drawable.myicon);

从 API 22使用:

Drawable myDrawable =  ResourcesCompat.getDrawable(getResources(),
R.drawable.dos_red, null);

现在你可以使用 SetImageDrawable (可绘制).example:

ImageView iState = findViewById(R.id.imageview_state);
if (isOk){
iState.setImageDrawable(getDrawable(R.drawable.outline_ok));
}else{
iState.setImageDrawable(getDrawable(R.drawable.outline_no));
}

enter image description here