gpt4 book ai didi

android - 从 picasso 获取图像uri?

转载 作者:可可西里 更新时间:2023-11-01 18:49:09 26 4
gpt4 key购买 nike

我有一个相当大的图像 URL 列表,我正在使用这些 URL 加载一个使用 Picasso 的 ViewPager。我需要能够通过 Intent 为这些图像提供共享功能(最终通过 ShareActionProvider 共享)。据我所知,Picasso 并不是真正为开箱即用地处理这类事情而构建的,尽管它提供了所有必要的工具来做到这一点。

我在研究之前的计划是创建一个简单的 LruCache,它使用 url 作为键和位图值。此缓存将通过 Picasso 的 Target 接口(interface)在 onBitmapLoaded 中进行。每当我想分享一张图片时,我都会检查缓存中的位图。如果它不在那里,我会和 Picasso 一起去取。既然我有了一个缓存的位图,不管怎样,我将写入一个文件(...这部分似乎不对,尽管我必须写入一个文件才能获取 uri,对吗?)并将文件 uri 添加到 Intent 。

但是我看到使用 Picasso.Builder 我可以设置(并保留对)我自己的缓存 - https://stackoverflow.com/a/18552559/413254 .这意味着我可以取消自定义 Target 和正确实现 hashCodeequals 方法的混淆,以确保准确的回收、检索等。

我的问题是,Picasso 是如何使用这个缓存的?键是什么?有没有办法在不将其写入磁盘的情况下获取位图 Uri?

最佳答案

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

如果你使用像Universal Image Loader这样支持自定义磁盘缓存的图像加载库会更好

如果您想使用 Picasso(这是一个不错的决定)。

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

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

在每次页面更改时,如果您的 ViewPager 中有一个 Fragment,请将 ShareActionProvider 放入您的 Fragments 中。

onCreateOptionsMenu 中获取 ShareActionProvider 的引用。然后用你得到的文件路径设置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);

编辑:我更喜欢的另一个选择是放弃 ShareActionProvider 并为此使用普通的菜单项。 ShareActionProvider 的问题是您必须事先准备好共享 Intent 以供用户共享。即使用户不共享它,您也必须准备好它。

但是当你有一个普通的按钮时,就容易多了,因为你只在用户点击分享按钮时才进行操作。在这种情况下,您可以简单地使用 Target 对象从 Picasso 再次请求图像,并将您获得的 Bitmap 写入共享外部文件系统并共享它。

关于android - 从 picasso 获取图像uri?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21693665/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com