Android - 如何使用Glide根据名称加载图片

34

嗨,我正在使用Glide从我的drawable文件夹中加载图片,这是我的代码:

Glide.with(this).load(R.drawable.my_drawable_image_name).into(myImageView);

我想知道是否有一种方法可以通过名称加载图像,就像这样:

Glide.with(this).load(my_drawable_image_name).into(myImageView);

因为我希望动态获取图像名称,例如从数据库中获取...

你有任何建议吗? 提前致谢。


图片存储在哪里? - Asif Patel
@James,你能分享一下使用Glide加载静态drawable图片的好处吗?相比直接使用setImageResource? - Anukool srivastav
7个回答

51

只需使用名称调用getImage方法即可获取Drawable

Glide.with(this).load(getImage(my_drawable_image_name)).into(myImageView);

public int getImage(String imageName) {

    int drawableResourceId = this.getResources().getIdentifier(imageName, "drawable", this.getPackageName());

    return drawableResourceId;
}

12

试一试:

Glide.with(this)
.load(getResources()
.getIdentifier("my_drawable_image_name", "drawable", this.getPackageName())
.into(myImageView);

5

使用 Uri。

String image = "image.jpg";
    String completePath = Environment.getExternalStorageDirectory() + "/" + image;

    File file = new File(completePath);
    Uri uri = Uri.fromFile(file);

    Glide.with(this).load(uri).into(imageView);

1
Glide.with(ProfileActivity.this)
        .load(profileImage)
        .placeholder(R.drawable.baseline_person_24)
        .into(binding.profileIv);

2
感谢您对Stack Overflow社区做出贡献的兴趣。这个问题已经有很多答案了,其中一个答案已经得到社区广泛验证。您确定您的方法之前没有被提到过吗?如果是这样的话,能否解释一下您的方法与众不同的地方,在什么情况下您的方法可能更好,并且/或者为什么您认为之前的答案不够满意。您可以编辑您的回答并提供解释吗? - Jeremy Caney

0
您可以使用以下代码使用Glide从URL获取BitmapDrawable。此代码片段用于为TextView设置drawableEnd/drawbleRight
Glide.with(context)
            .asBitmap()
            .load(url)
            .into(object : CustomTarget<Bitmap>() {
                override fun onResourceReady(
                    bitmap: Bitmap,
                    transition: Transition<in Bitmap>?
                ) {
                    val drawable: Drawable = BitmapDrawable(
                        context.resources,
                        bitmap
                    )

                    textView.setCompoundDrawablesWithIntrinsicBounds(
                        null, null, drawable, null
                    )
                }

                override fun onLoadCleared(placeholder: Drawable?) {

                }
            })

-1

我认为你应该尝试这个

Glide.with(mContext)
            .load(mContext.getResources().getDrawable(R.drawable.my_drawable_image_name))
            .placeholder(R.mipmap.icon)
            .into(myImageView);

Glide的Load方法也接受Drawable对象作为参数来加载图像。您只需要从可绘制的图像中获取Drawable对象并将其传递给Load方法即可。 我想要图像的圆角,这就是我使用Glide的原因。在您的情况下,您应该使用这个。

myImageView.setImageDrawable(mContext.getResources().getDrawable(R.drawable.my_drawable_image_name))

如果您也想使用圆形图像,请使用此代码。
Glide.with(mContext)
            .load(Glide.with(mContext)
            .transform(new FitCenter(), new RoundedCorners((int) mContext.getResources().getDimension(R.dimen._10sdp))
            .placeholder(R.mipmap.icon)
            .into(myImageView);

-1
使用名称从drawable加载图像的简单方法
Glide.with(context)
            .load(context.getResources().getIdentifier("my_drawable_image_name", "drawable", context.getPackageName()))
            .diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
            .placeholder(R.drawable.add_photo_placeholder)
            .error(R.color.red)
            .override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
            .into(userPhoto);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接