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

Dan*_*ali 40 android picasso

我必须展示一个drawable来自res一个ImageView.在这个应用程序中,我出于某些原因使用Picasso.

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

uri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://"+context.getPackageName()+"/drawable/" + drawableName);
Run Code Online (Sandbox Code Playgroud)

这里使用的drawableName是文件名而不是资源ID.

然后

Picasso.with(context).load(uri).into(imageView);
Run Code Online (Sandbox Code Playgroud)

我肯定知道可绘制的名字是正确的,但毕加索似乎不喜欢这个uri.

Aeg*_*gis 77

如果图像在您的drawable文件夹中,那么您可以加载它.

Picasso.with(context).load(R.drawable.drawableName).into(imageView);
Run Code Online (Sandbox Code Playgroud)

和毕加索将加载它不需要一个Uri.

  • 对于动态引用:int resId = this.ctx.getResources().getIdentifier("<package_name>:drawable /"+ imageName,null,null); (10认同)

Rhe*_*Bee 9

  • 这是因为您不想对要加载的图像进行硬编码...

如果您知道要加载的图像的整数值,则可以懒惰地从可绘制文件夹加载本地图像文件.

然后你可以这样做:

Picasso.with(getContext()).load(imageResourceId)
.error(R.drawable.ic_launcher)
.into(imageView);
Run Code Online (Sandbox Code Playgroud)

哪里

ImageView的

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

imageView = (ImageView) convertView
.findViewById(R.id.itemImage);
Run Code Online (Sandbox Code Playgroud)

在哪里

imageResourceId

是drawable的整数值.您可以通过以下方式检索此整数值:

int productImageId = resources.getIdentifier(
productImageName, "drawable", context.getPackageName());
Run Code Online (Sandbox Code Playgroud)

以及

productImageName

是你想要绘制的drawable的名称(即"ic_launcher")

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


Dan*_*ali 8

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

  • 毕加索现在支持使用URI.请参阅https://square.github.io/picasso/javadoc/com/squareup/picasso/Picasso.html (5认同)

Md *_*ury 7

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

梯度

implementation 'com.squareup.picasso:picasso:2.71828'
Run Code Online (Sandbox Code Playgroud)

设置可绘制图像

Picasso.get()
    .load(url)
    .placeholder(R.drawable.user_placeholder)
    .error(R.drawable.user_placeholder_error)
    .into(imageView);
Run Code Online (Sandbox Code Playgroud)

奖励,可通过名称获取:

public static int getDrawableIdFromFileName(Context context, String nameOfDrawable) {
        return context.getResources().getIdentifier(nameOfDrawable, "drawable", context.getPackageName());
}
Run Code Online (Sandbox Code Playgroud)


小智 6

毕加索的文件中所述.

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

load(android.net.Uri uri) 
Run Code Online (Sandbox Code Playgroud)

所以你必须做类似以下的事情:

Picasso.with(context).load(uri).into(imageView); 
Run Code Online (Sandbox Code Playgroud)

就像你刚才做的一样.

希望有所帮助.

  • 离开吧......可能还有其他人有同样的疑问:) (3认同)
  • 该方法适用于除了指向内部资源(例如drawable)的URI之外的每个URI.即:`Uri.parse("http://website.com/image.jpg")`是Picasso的有效URI.但毕加索无法用`Uri.parse("android.resource:// your_drawable")`加载一个drawable.正如他们所说,此功能将适用于Picasso 2.2+ (2认同)