【发布时间】:2015-03-20 20:46:38
【问题描述】:
在过去的 10 多个小时中,我尝试在单个 Android 屏幕上获取大量 (40+) 图像(ImageButton 格式),而不会出现内存不足错误。我从事的活动是着色书应用程序的图像选择器。图像的大小范围为(500 到 1200)x(500 到 1200),PNG(如果重要的话)。
我试过了:
- 从代码中添加图像的水平滚动视图。结果很慢(我在 UI 线程上做)并且消耗大量内存空间。
- 通过 AsyncThread 从代码中添加图像的水平滚动视图。结果很快,但仍然消耗大量内存空间。 我最喜欢这款的用户体验!
- 网格视图和列表视图 - 两者都非常不稳定(在第一个 Nexus 7 上测试)。内存使用更好。
我在考虑什么
- View Pager - 从性能角度来看,第一个结果看起来比 Grid View 更好(我目前还没有完成它来评估内存使用情况,但据我了解应该更好)。然而,我不喜欢用户体验,更喜欢所有图像的可滚动列表。
- 将我的资源转换为 JPG(这会消除透明字节吗?)
- 将图像缩小到最大 500x500 像素
似乎没有任何解决方案能像在所有设备上都可用的 Android Photo Gallery 应用程序那样出色。这种经历是我想反映的。不知道这是怎么做到的:(
两个问题。
- 完成此类事情(40 多张可在单个屏幕上滚动的图像)的最佳方法是什么?真的是 ViewPager 吗?带有 AsyncTask 的 ScrollView 和经过深思熟虑的图像分辨率?我还没有尝试过的东西?
- 我应该尝试保持的内存限制是多少?看看Android heap size on different phones/devices and OS versions,它似乎是 256 MB,这是合理的假设吗?
谢谢。周末愉快!
PS。在 iOS 上,当我将所有按钮添加到滚动视图中时,一切都像魅力一样 :(
【问题讨论】:
-
如果您从 Internet 加载它们,请考虑使用外部库,例如
Universal Image Loader或Picasso(square.github.io/picasso)。 -
是否同时显示 40 张图片?这很重要。如果您显示您的应用程序的屏幕,那就太好了。
-
为什么要在按钮上加载 500x500 的图像?以更合理的尺寸(可能是 50x50)创建缩略图并使用它。选择时加载完整尺寸的图像。
-
查看画廊应用的安卓源代码。 @Hobo Sapiens 是正确的,在选择一张之前,真的没有理由加载完整的图像
-
您的问题似乎有些矛盾。您提到
ViewPager,但说“但是,我不喜欢用户体验,更喜欢所有图像的可滚动列表。”。然后你提到“...Android Photo Gallery 应用程序...”并说“这种体验是我想反映的。”。之前您提到使用 Nexus 7...我有一个 Nexus 7,并且预装的照片应用程序在全屏查看图像时使用ViewPager。你为什么喜欢内置的照片应用,但不喜欢ViewPager的用户体验?
标签: android imageview android-imageview imagebutton