如何使用图像显示长列表视图而不会耗尽内存?

时间:2014-03-14 04:12:08

标签: android android-listview android-bitmap

我开发的应用程序显示的列表视图包含用户点击时编辑的不同图像。

这是我的row.xml文件的代码。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >

 <ImageView
    android:id="@+id/imageView1"
    android:layout_width="80dp"
    android:layout_height="80dp"/>

 <TextView
     android:id="@+id/textView1"
     android:layout_marginTop="20dp"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:gravity="center_vertical"
     android:layout_marginLeft="8dp"
     android:text="TextView" 
     android:textSize="25sp"


     />

我只使用一组图像,存储在文件夹res / drawable / drawable-nodpi中(因为我需要它们保持原始大小才能将它们编辑为位图)。

问题是这些图像也会在单个活动中显示出来,因此,当我创建列表视图时,它会使用大量内存,而列表会滚动一些延迟。如何在没有此问题的情况下在列表中显示这些图像?我应该创建另一组较小的图像以在列表中使用它们吗?当应用程序将图像保存到SD卡或缓存中时,我已经阅读了帖子,但实际上我不确定哪种解决方案最适合我的特定应用程序。

提前致谢

4 个答案:

答案 0 :(得分:0)

您可以使用以下链接制作列表。一旦看不到,他们就会释放图像缓存。使用它你可以把许多图像放在你的列表中:

https://github.com/thest1/LazyList

希望这会对你有所帮助。

答案 1 :(得分:0)

试试这个.. Android-Universal-Image-Loader libriary。该项目旨在为异步图像加载,缓存和显示提供可重用的工具。它最初基于Fedor Vlasov的项目,并且从那时起经过了大量的重构和改进。

https://github.com/nostra13/Android-Universal-Image-Loader

对于可绘制资源,请使用此..

String imageUri =&#34; drawable://&#34; + R.drawable.image; //来自drawables(仅限图片,非9patch)

答案 2 :(得分:0)

我认为这些方法可能有所帮助:

  1. 将这些图像放入服务器,然后使用通用图像加载程序加载它。通用图像加载器已经解决了这个问题您可以尝试此项目https://github.com/dodola/Android-Universal-Image-Loader

  2. 如果您必须将这些图像放入res中,我认为您可以实现自己的图像加载器。在Image加载器中,您必须使用软引用将图像缓存在内存中。这是另一个问题。

答案 3 :(得分:0)

我建议您使用A Query下载图像。只需从this link

下载jar文件即可

使用方法:

AQuery _aq = new AQuery(youractivity context);

//fetch and set the image from internet, cache with file and memory 
aq.id(R.id.your_imageview_object).image("http://www.vikispot.com/z/images/vikispot/android-w.png");