【问题标题】:Picasso load drawable resources from their URIPicasso 从其 URI 加载可绘制资源
【发布时间】:2014-02-05 03:52:55
【问题描述】:

我必须将drawableres 显示为ImageView。在这个应用程序中,我出于某些原因使用了毕加索。

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

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

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

然后

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

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

【问题讨论】:

  • 您无法将任何内容“加载”到可绘制文件夹中,资源是只读的
  • 抱歉我的英文不太好:)
  • 它不是你的英文,它已经足够好了,我的意思是你不能在drawable文件夹中添加任何东西
  • 不不,我没有将任何内容加载到可绘制文件夹中。我正在使用 Picasso 将可绘制对象加载到 ImageView 中。

标签: android picasso


【解决方案1】:

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

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

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

【讨论】:

  • 我需要动态引用 drowables
  • 动态引用使用:int resId = this.ctx.getResources().getIdentifier(":drawable/" + imageName, null, null);
  • 不适用于矢量绘图,至少目前,2018 年 7 月 30 日
【解决方案2】:

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

【讨论】:

【解决方案3】:

Picasso 的文档中所述。

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

load(android.net.Uri uri) 

所以您必须执行以下操作:

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

就像你已经在做的一样。

希望有所帮助。

【讨论】:

  • 该方法适用于所有 URI,除了那些指向内部资源(例如可绘制对象)的 URI。即:Uri.parse("http://website.com/image.jpg") 是 Picasso 的有效 URI。但毕加索无法使用Uri.parse("android.resource://your_drawable") 加载可绘制对象。正如他们所说,此功能将适用于 Picasso 2.2+
  • 别说了..可能还有其他人有同样的疑问:)
【解决方案4】:
  • 如果你不想硬编码你要去的图像 加载...

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

那么你可以这样做:

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”)

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

【讨论】:

  • 您可以将图像放入drawable或mipmap中。通常可绘制文件夹非常适合保存形状、选择器和背景的 xml。您还可以将 9 个补丁图像放在可绘制文件夹中。无法从 mipmap 文件夹中识别 9 补丁。 mipmap 文件夹严格用于图像。这样您就可以对图像资源进行分类、组织和避免混合。
  • 答案就在这个名字的上方:journaldev.com/13759/…
  • with() 方法现已弃用,使用 Picasso.get().load(imageResourceId).into(imageView)
【解决方案5】:

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

GRADLE

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

【讨论】:

  • 它是可绘制的 id。你可以用他的方法getDrawableIdFromFileName()
猜你喜欢
  • 2013-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-02
相关资源
最近更新 更多