【问题标题】:Asynchronous Html.ImageGetter for setting multiple images in a TextView用于在 TextView 中设置多个图像的异步 Html.ImageGetter
【发布时间】:2011-02-03 15:14:12
【问题描述】:

我正在编写一个应用程序,它获取 HTML 页面并解析它们以显示在屏幕上。具体来说,此应用程序从留言板中提取 HTML 并列出用户发布的帖子。

问题是帖子里的很多内容都是<img>标签中的图片,所以我需要写一个Html.ImageGetter来处理图片的下载。

我的textView.setText() 方法如下所示:

myTextView.setText(Html.fromHtml(myText, new ImageGetter() {                 
        @Override
        public Drawable getDrawable(String source) {
        Drawable d;

        // Need to async download image here 

         return d;
        }
    }, null));

同步执行此操作很简单,但有没有建议的异步执行此操作的方法,这样它就不会锁定我的 UI 线程?我还想最终构建这些图像的缓存,但我想一旦异步下载存在,这将非常简单。

【问题讨论】:

    标签: java android html android-image


    【解决方案1】:

    同步执行此操作很简单,但有没有建议的异步执行此操作的方法,这样它就不会锁定我的 UI 线程?

    这将是困难的,也许是不可能的。您必须立即返回 something。即使那是占位符,您也面临下载完成后如何替换占位符的挑战。由于您无法访问渲染图像的ImageView(如果有 ImageView),我不知道您将如何安排替换占位符。

    【讨论】:

    • 我明白你的意思。是否有另一种方法来显示散布在 标记的 Html?我已经阅读了一些关于使用 WebView 的内容,但并不想将许多 WebViews 作为行放在 ListView 中。任何其他建议表示赞赏:)
    • @thedude19: WebView in ListView 可能由于滚动而出现问题。然而,与此同时,Html.fromHtml() 中的<img> 支持似乎针对本地资产(例如,将表情符号转换为等效图标)。此外,我真的很怀疑您是否希望在ListView 中填写完整的留言板条目,因为它们可能真的很长。我谦虚地建议您考虑让您的 ListView 显示帖子的前 3-4 行,仅纯文本,如果他们点击 ListView 条目,则在 WebView 中显示完整的帖子。
    • @CommonsWare:感谢您抽出宝贵时间回复。我会在前进的同时考虑所有这些。
    • @CommonsWare:对于完成这项任务还有什么其他建议吗?我真的很想通过在消息中显示图像来复制留言板的感觉。同步执行并在设备本地缓存图像怎么样?这还需要一个选项,允许用户在连接受限的情况下关闭图像下载。
    • @thedude19:“同步执行它并在设备本地缓存图像怎么样?” - 如果“同步”是指实际在ImageGetter 中获取下载,您的应用程序将崩溃ANR,下载时列表不会滚动。您可能希望考虑在 WebView 中呈现整个 UI。
    【解决方案2】:

    【讨论】:

    • 我假设 OP 熟悉 AsyncTask 等人,并专门询问如何使用 ListView 中的 ImageGetter.getDrawable() 执行此操作。见我的相关@​​987654327@。
    【解决方案3】:

    如何在显示 html 之前使用不可见的 Html.fromHtml 提取所有 url,将这些 url 放在一个列表中,异步下载所有图像,将它们存储在内存缓存中,然后实现 ImageGetter 只是做一个缓存使用 url 作为键和 drawable 作为值的查找。

    【讨论】:

    • 这个提议不是要求在显示ListView之前下载并缓存整个列表吗?如果是这样,我不确定这是否比同步执行更好。
    【解决方案4】:

    为了异步下载图像并将它们存储在内存缓存中,这里有一个迷你库 :) https://github.com/koush/UrlImageViewHelper

    【讨论】:

      猜你喜欢
      • 2011-04-15
      • 2015-08-18
      • 1970-01-01
      • 2016-09-22
      • 1970-01-01
      • 1970-01-01
      • 2019-07-19
      • 2016-01-23
      • 2019-11-12
      相关资源
      最近更新 更多