簡體   English   中英

如何從變量設置圖像視圖資源?

[英]How to set imageview resource from variable?

我有很多圖像(數百個),我需要將其中一些作為ImageView的資源,但是如果我創建 If Then 將 Image 設置為圖像名稱,我會死於這些大量的代碼。 我想設置名稱在變量內的圖像資源,但我不知道如何。 如果我有img.setImageResource(R.drawable.my_image); 如何在my_image分配變量名稱而不是真實圖像名稱? 請幫忙。 謝謝。

試試這個:

 String resourceName = "clouds";
 int resourceIdentifier = getResources().getIdentifier(resourceName, "drawable", Constants.CURRENT_CONTEXT.getPackageName());

然后

imgView.setImageResource(resourceIdentifier);

我不知道我是否清楚地理解了您的要求,但您為什么不嘗試這樣做:

    int my_image = R.id.my_image;
    img.setImageResource(ContextCompat.getDrawable(this, my_image));

https://stackoverflow.com/a/29146895/8526518有關 ContextCompat 的更多信息

如果您更喜歡資產文件夾而不是資源,那么您可以嘗試此代碼

在資產目錄中創建子文件夾。 使用 getAssets().list() 從資產中獲取所有文件名:

String[] images =getAssets().list("images");
ArrayList<String> listImages = new ArrayList<String>(Arrays.asList(images));

現在要在 imageview 中設置圖像,您首先需要使用 assets 中的圖像名稱獲取位圖:

InputStream inputstream=mContext.getAssets().open("images/"
                                      +listImages.get(position));
Drawable drawable = Drawable.createFromStream(inputstream, null);
imageView.setImageDrawable(drawable);

如果您使用 kotlin 並喜歡使用其擴展功能,則只是對 S-Sh 答案的方便重構:

fun ImageView.loadDrawableFromName(name:String, ctx: Context, visible:Int=View.VISIBLE){
    val resId = ctx.resources.getIdentifier(name, "drawable", ctx.packageName)
    this.setImageResource(resId)
    this.visibility = visible
}

您可以通過兩種方式調用它:

imgname="IMGNAME"
myimageview.loadDrawableFromName(imgname, ctx)

imgname="IMGNAME"
myimageview.loadDrawableFromName("@drawable/$imgname", ctx)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM