毕加索从其URI中加载可绘制资源

时间:2014-01-16 09:53:11

标签: android picasso

我必须将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。

5 个答案:

答案 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());
}