我必须将drawable
res
显示为ImageView
。在这个应用程序中,我出于某些原因使用Picasso。
在这种情况下,我需要使用其URI而不是其id来加载drawable
。
要做到这一点,这是我的代码:
uri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://"+context.getPackageName()+"/drawable/" + drawableName);
这里使用的drawableName是文件名而不是资源ID。
然后
Picasso.with(context).load(uri).into(imageView);
我肯定知道可绘制的名字是正确的,但毕加索似乎不喜欢这个uri。
答案 0 :(得分:74)
如果图像在您的可绘制文件夹中,那么您只需加载它即可。
Picasso.with(context).load(R.drawable.drawableName).into(imageView);
并且毕加索将加载它而不需要Uri。
答案 1 :(得分:9)
如果您知道要加载的图像的整数值,则可以懒惰地从可绘制文件夹加载本地图像文件。
然后你可以这样做:
Picasso.with(getContext()).load(imageResourceId)
.error(R.drawable.ic_launcher)
.into(imageView);
哪里
ImageView的
是您要显示图像的视图。例如:
imageView = (ImageView) convertView
.findViewById(R.id.itemImage);
在哪里
imageResourceId
是drawable的整数值。您可以通过以下方式检索此整数值:
int productImageId = resources.getIdentifier(
productImageName, "drawable", context.getPackageName());
以及
productImageName
是您要绘制的可绘制的名称(即“ic_launcher”)
这些都可以从 ADAPTER
内部完成答案 2 :(得分:8)
找到答案。不幸的是,Picasso不允许通过URI进行可绘制加载。这是一个传入的功能。
答案 3 :(得分:6)
如Picasso的文档中所述。
他们现在支持从URI加载Image,如下所示:
load(android.net.Uri uri)
因此您必须执行以下操作:
Picasso.with(context).load(uri).into(imageView);
就像你刚才所做的一样。
希望有所帮助。
答案 4 :(得分:5)
来自picasso v2 +这是一个很大的修改。新版本对于管理图像缓存数据非常有用。它使用的是Singleton Instance。
<强>摇篮强>
implementation 'com.squareup.picasso:picasso:2.71828'
设置可绘制图片
Picasso.get()
.load(url)
.placeholder(R.drawable.user_placeholder)
.error(R.drawable.user_placeholder_error)
.into(imageView);
奖励,按名称获取:
public static int getDrawableIdFromFileName(Context context, String nameOfDrawable) {
return context.getResources().getIdentifier(nameOfDrawable, "drawable", context.getPackageName());
}