从 picasso 获取图像 uri?

2024-03-01

我有一个相当大的图像 URL 列表,我用它来加载ViewPager使用毕加索。我需要能够通过意图为这些图像提供共享功能(最终通过共享操作提供者 http://developer.android.com/guide/topics/ui/actionbar.html#ShareActionProvider)。据我所知,Picasso 并不是真正为处理此类事情而设计的,尽管它提供了所有必要的工具。

我在研究之前的计划是创建一个简单的LruCache它使用 url 作为键和位图值。此缓存将发生在onBitmapLoaded通过毕加索的Target界面。每当我想共享图像时,我都会检查位图的缓存。如果没有,我就和毕加索去拿。现在我已经有了一个缓存的位图,无论如何,我将写入一个文件(...这部分似乎不对,尽管我必须写入一个文件来获取 uri,对吧?)并将文件 uri 添加到意图。

然而我看到随着Picasso.Builder我可以设置(并保留对)我自己的缓存的引用 -https://stackoverflow.com/a/18552559/413254 https://stackoverflow.com/a/18552559/413254。这意味着我可以取消这个习惯Target以及对正确实施的困惑hashCode and equals确保准确回收、检索等的方法

我的问题是,毕加索如何使用这个缓存?钥匙是什么?有没有办法获取位图 Uri 而不将其写入磁盘?


如果你想使用ShareActionProvider要共享当前页面上的图像,您不必保留自己的图像缓存。但为了能够将其共享给其他人,图像应该位于设备上的共享文件系统中。

如果您使用具有自定义磁盘缓存支持的图像加载库会更好,例如通用图像加载器 https://github.com/nostra13/Android-Universal-Image-Loader

如果你想使用毕加索(这是一个很好的决定)。

您要么必须在每次页面更改时保存图像的副本,这也不是一个好的选择。

或者您可以为 Picasso 提供自定义网络处理程序并为其设置自定义缓存实现。我建议使用带有自定义缓存的 OkHttp,它以您想要的格式存储文件。当您这样做时,您必须有一个将图像 URL 转换为设备上的文件路径的函数。

在每次页面更改时,如果您有Fragment在你的里面ViewPager, 放在ShareActionProvider进入你的片段。

获取参考ShareActionProvider inside onCreateOptionsMenu。然后用你得到的文件路径设置Intent。

Intent shareIntent = new Intent(Intent.ACTION_SEND);
Uri phototUri = Uri.parse(Utils.getFilePath(imageUrl));
shareIntent.setData(phototUri);
shareIntent.setType("image/png");
shareIntent.putExtra(Intent.EXTRA_STREAM, phototUri);
mShareActionProvider.setShareIntent(intent);

Edit:我更喜欢的另一个选择是放弃ShareActionProvider并为此使用普通菜单项。问题在于ShareActionProvider是你必须分享Intent预先准备好供用户分享。即使用户不共享,您也必须做好准备。

但是当你有一个普通按钮时,就容易多了,因为你只在用户单击共享按钮时进行操作。在这种情况下,您只需再次请求该图像即可Picasso with a Target对象并写出Bitmap您找到共享外部文件系统中的一个文件并共享它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 picasso 获取图像 uri? 的相关文章

随机推荐

  • 如何解释函数实例的bind/>>>=?

    我正在努力提高我的理解Applicatives and Monad通过在 Javascript 中实现其函数实例来实现 我对 Haskell 的了解有限 我希望我的问题有意义 这是我的实现fmap lt gt and gt gt 为了Fun
  • malloc(0) 有什么意义?

    我刚看到这个code https github com mxcl scrobsub blob 2ad2f6131e5900d4c62d8c5bcdb15c069f17e3bd scrobsub c L94 artist char mallo
  • 类 PhpStorm_Codeception_ReportPrinter 不存在

    我尝试在 PhpStorm 中运行 Codeception 功能测试 但不断收到一条错误 提示缺少类 我在互联网上搜索过 除了一篇文章之外 没有发现任何可以解决这个问题的方法https intellij support jetbrains
  • 无法加载文件或程序集“System.Net.Http”

    在我的构建输出的诊断视图中显示了此冲突 System Net Http Version 4 0 0 0 Culture neutral PublicKeyToken b03f5f7f11d50a3a 和 System Net Http Ve
  • 使用 CSS Grid 时如何使内容居中并使背景覆盖整列?

    当我添加这段代码时 place items center 我的元素居中 但只有文本应用了背景颜色 当我删除此代码时 place items center 背景颜色覆盖整个列 但文本不再居中 main display grid grid te
  • 如何找出浏览器实际使用的网站图标

    我有一个新网站 其中包含使用源文件自动生成的一组图标图像真实网站图标生成器 http realfavicongenerator net 并且有 9 个苹果图标 1 Android 图标 3 个命名图标 1 Safari 固定SVG 1 js
  • 在 Wayland 和 X11 上模拟鼠标和键盘输入

    我正在对用 C 编写的 OpenGL 应用程序进行小型验收测试 到目前为止 我只能截取屏幕截图 还没有找到在 Wayland 和 X11 上模拟鼠标和键盘输入的方法 关于如何在 Wayland X11 中操作特定窗口的事件流有什么建议吗 用
  • *这*真的是从 Java 代码启动第二个 JVM 的最佳方式吗?

    这是我的后续自己之前的问题 https stackoverflow com questions 1218790 我有点不好意思问这个 但是无论如何 如何以独立于系统的方式从独立的 Java 程序启动第二个 JVM 并且无需依赖诸如 JAVA
  • Core Data 属性更改为 nil(与 ARC 相关?)

    我有一些核心数据功能 在最近进行一些 看似不相关的 更改之前一直运行良好 现在我遇到问题 属于特定 NSManagedObject 子类实例的所有属性突然返回 nil 假设我的 NSManagedObject 子类名为 Foo 它只有一个名
  • Android Volley,使缓存无效并每 (x) 分钟发出新请求

    我找不到这个问题的更新答案 我正在使用 Volley 向 Web API 发送请求 它返回 JSON 我正在使用如下所示的缓存功能 但我想确保列表视图经常刷新 现在假设为 30 分钟 如何使该给定 URL 的缓存无效 以便我的应用程序自动处
  • 如何将背景图像放置在距其容器右侧绝对距离的位置?

    我可以使用以下命令将一个小背景图像 图标放置在距其容器左中心 4 像素的位置 background url no repeat 4px 50 我怎样才能把它定位到距离 4 个像素的地方right 根据您的情况以及您想要支持的浏览器 此方法有
  • 链接在 UI 可选内部不起作用

    这些是来自 JQuery 网站的代码 我重写了其中的内容
  • 加拿大邮政编码功能的高效正则表达式

    var regex A Za z d A Za z d A Za z d var match regex exec value if match if value indexOf 1 value indexOf 1 value length
  • 按多列分组 - LINQ

    我见过按列乘法分组的例子 但是对于类 我正在尝试为 EnumerableDataRowList 执行此操作 但我得到 无效的匿名类型成员声明符 EnumerableDataRowList
  • 如何绘制箭头(在 Android 中)?

    我对 Android 相当陌生 一直在尝试 Canvas 我正在尝试绘制箭头 但我只是运气好地绘制了轴 所有箭头都不起作用 我搜索了一下 找到了一个Java示例 但是Android没有GeneralPath or AffineTransfo
  • 为什么在属性声明中只使用setter?

    int MyProperty set 在财产上仅使用 setter 的想法是什么 如果我们为一个属性设置某个值 我猜它很可能在某个时刻读取该值 只写属性在基类库中很少见 但是XmlReaderSettings XmlResolver htt
  • 主机名与证书主题不匹配

    当我尝试构建我的 android 项目时 我收到此 gradle 错误 我正在使用 cwac cam 库 错误 主机名 repo commonsware com s3 amazonaws com 与对等方提供的证书主题不匹配 CN s3 a
  • 当我们开始旋转设备时以及旋转完成后将调用什么方法

    我想以编程方式检测 ipad 上的旋转过程 在这种情况下 我想在旋转开始时将布尔值设置为 yes 并在旋转结束后将其设置为 false 是否有任何方法在旋转开始和旋转结束时调用 来自苹果文档 在用户界面开始旋转之前发送到视图控制器 void
  • Flex 项目未包装在列方向容器中

    我想用flex direction column对于特定的布局 我通常使用标准flex direction row 所以我在使用时遇到了一些问题column 我不太知道如何控制它 并且在谷歌上没有找到任何有用的东西 我有一个常规的UL列表
  • 从 picasso 获取图像 uri?

    我有一个相当大的图像 URL 列表 我用它来加载ViewPager使用毕加索 我需要能够通过意图为这些图像提供共享功能 最终通过共享操作提供者 http developer android com guide topics ui actio