【问题标题】:How to use listview to render huge images?如何使用 listview 渲染大图?
【发布时间】:2015-06-09 06:42:39
【问题描述】:

我有一个要渲染的巨大图像 (1024x25373p) 被切割成 99 张 1024x256p 的图像。 我尝试使用 ListView,但没有成功:它在滚动时崩溃,没有任何错误(除了一行说进程已停止)。 那么,我的问题是,如何渲染这个巨大的图像?

请注意,我曾尝试使用 moagrius 的 TileView,但没有成功(我无法使用导航抽屉)

【问题讨论】:

  • 先生,邮政编码和日志
  • 显示您的项目视图布局
  • 您需要阅读大量有关如何缩放图像的信息。每个图像需要大约 1MB 的 RAM。所以 99 大约需要 99MB!即使堆很大,您也无法加载它们。
  • 你并不真正想要一个列表视图。您需要一个自定义视图,该视图允许您滚动并仅动态加载绘制当前屏幕所需的图块。可能与 LRUCache 结合使用来限制位图使用的内存量,同时允许您在内存中保留一些用于滚动。
  • @GaurawYadav 对不起,我删除了代码尝试其他的东西......我会尝试重新制作它。

标签: android listview render


【解决方案1】:

作为一个建议,

  1. 如果这是列表视图,您可能不需要“1024x256p”这么大尺寸的图像。 你的 imageView 的实际大小可能比这要少得多。所以这是一种浪费 如果您尝试直接加载这些图像而不进行任何处理,则堆。

  2. 当然,您需要根据您需要的实际尺寸对图像进行一些缩小。很好的例子和代码已经发布在official doc

  3. 您需要释放内存或清除特定时刻在列表视图上不可见的所有位图。

  4. 您可以使用进度加载器将图像加载到列表视图中。然后加载将基于滚动发生。

  5. 您也可以在清单中定义更大的堆启用,但不建议这样做,但必须在高度消耗内存的应用程序中这样做。

    android:largeHeap="true"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    相关资源
    最近更新 更多