45

我必须显示一个drawablefromres到一个ImageView. 在这个应用程序中,我出于某些原因使用了毕加索。

在这种情况下,我需要drawable使用它的 URI 而不是它的 id 来加载它。为此,这是我的代码:

uri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://"+context.getPackageName()+"/drawable/" + drawableName);

这里使用的 drawableName 是文件名而不是它们的资源 ID。

然后

Picasso.with(context).load(uri).into(imageView);

我确定可绘制名称是正确的,但毕加索似乎不喜欢这个 uri。

4

5 回答 5

87

如果图像在您的可绘制文件夹中,那么您可以加载它。

Picasso.with(context).load(R.drawable.drawableName).into(imageView);

毕加索将加载它而不需要 Uri。

于 2014-01-16T11:34:22.517 回答
9

找到了答案。不幸的是,Picasso 不允许通过 URI 加载可绘制对象。这是一个传入的功能。

于 2014-01-16T13:59:08.290 回答
9
  • 这是如果您不想对要加载的图像进行硬编码...

如果您知道要加载的图像的整数值,则可以从可绘制文件夹中延迟加载本地图像文件。

然后你可以这样做:

Picasso.with(getContext()).load(imageResourceId)
.error(R.drawable.ic_launcher)
.into(imageView);

在哪里

图像视图

是您希望显示图像的视图。例如:

imageView = (ImageView) convertView
.findViewById(R.id.itemImage);

以及在哪里

imageResourceId

是可绘制对象的整数值。您可以通过以下方式检索此整数值:

int productImageId = resources.getIdentifier(
productImageName, "drawable", context.getPackageName());

产品图片名称

是您要绘制的drawable的名称(即“ic_launcher”)

这一切都可以在适配器内部完成

于 2014-03-28T09:39:23.600 回答
8

picasso v2+ 开始,这是一个很大的修改。新版本对于管理图像缓存数据非常有帮助。它使用单例实例。

梯度

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());
}
于 2018-04-24T06:28:36.110 回答
6

正如Picasso的文档中所述。

他们现在支持从 URI 加载图像,如下所示:

load(android.net.Uri uri) 

所以你必须做如下的事情:

Picasso.with(context).load(uri).into(imageView); 

就像你已经在做的一样。

希望有帮助。

于 2014-01-28T08:14:10.440 回答