Glide占位符矢量图资源未找到异常

7

最近我在尝试在我的工作中添加 矢量图。我正在使用Glide来设置我的可绘制对象。这是我的代码:

Glide
                .with(mContext)
                .load(resDrawable)
                .placeholder(placeHolderResDrawable)
                .centerCrop()
                .bitmapTransform(new CropCircleTransformation(MyLruBitmapPool.getInstance()))
                .into(imgRoundedView);

我将矢量图形放到了resDrawableplaceHolderResDrawable中。在Lolipop设备上工作正常。但当我在低于Lolipop的设备上测试时发生了崩溃。尝试将drawable放入placeholder中时,导致Resources$NotFoundException

以下是崩溃报告:

android.content.res.Resources$NotFoundException: 文件 res/drawable/default_round_profile.xml 从可绘制资源ID#0x7f02013d 中找不到 at android.content.res.Resources.loadDrawable(Resources.java:3451) at android.content.res.Resources.getDrawable(Resources.java:1894) at com.bumptech.glide.request.GenericRequest.getPlaceholderDrawable(GenericRequest.java:395) at com.bumptech.glide.request.GenericRequest.begin(GenericRequest.java:265) at com.bumptech.glide.manager.RequestTracker.runRequest(RequestTracker.java:36) at com.bumptech.glide.GenericRequestBuilder.into(GenericRequestBuilder.java:616) at com.bumptech.glide.GenericRequestBuilder.into(GenericRequestBuilder.java:652) at com.bumptech.glide.DrawableRequestBuilder.into(DrawableRequestBuilder.java:436)


检查一下占位符是否在v21文件夹中。 - JAAD
正如我所说,这在Lolipop中可以工作,但在Lolipop以下版本中会崩溃。@ankit我将其放在默认的drawable文件夹中。 - Sayem
不支持矢量图在Lollipop之前的版本中。 - JAAD
@ankitagrawal 在 chrisbanes 的文章中提到:“允许开发人员在运行 Android 2.1 及以上版本的所有设备上轻松使用<vector> drawables。” - Sayem
让我们在聊天中继续这个讨论 - JAAD
显示剩余5条评论
1个回答

15
尝试使用ContextCompat获取可绘制对象,并将其设置为占位符:

尝试使用ContextCompat获取可绘制对象,并将其设置为占位符:

ContextCompat.getDrawable(mContext, placeHolderResDrawable);

所以它应该是:

Glide.with(mContext)
     .load(resDrawable)
     .placeholder(ContextCompat.getDrawable(mContext, placeHolderResDrawable))
     .centerCrop()
     .bitmapTransform(new CropCircleTransformation(MyLruBitmapPool.getInstance()))
     .into(imgRoundedView);

Glide v4 更新:

Glide.with(mContext)
     .load(resDrawable)
     .apply(new RequestOptions()
         .placeholder(ContextCompat.getDrawable(mContext, placeHolderResDrawable))
         .centerCrop()
         .transform(new CropCircleTransformation(MyLruBitmapPool.getInstance())))
     .into(imgRoundedView);

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