具有许多图像的GridView导致慢/粗滚动

时间:2011-08-03 15:23:32

标签: android gridview scroll

在我的应用程序中,我有一个带有许多图像的GridView(~100),布局类似于这个:

我在HTC Desire HD上测试我的应用程序。当我在gridview中有88个图像时,滚动是平滑的。现在,如果我添加10个图像,那么我总共有98个,没有任何接近平滑滚动的东西 - 它现在“慢”,更粗糙,就像它在大块滚动一样。

这个gridview存在于TabLayout中,其中我还有一个包含许多元素的ListView。在gridview中使用98个图像时,此列表视图中的滚动也会受到影响。所以它就像整个应用程序以某种方式变慢(或使用比电话可以管理的更多“功率”)。

有什么方法可以优化gridview,所以它不会使用那么多的力量?

(PS:当使用大约150张图像时,应用程序只是停止工作(它断开连接,日志/调试中没有显示错误)。)

4 个答案:

答案 0 :(得分:4)

确保在适配器的getView()方法中回收图像。像这样:

public View getView(int position, View convertView, ViewGroup parent) {

        // if it's not recycled, initialize some attributes
        if (convertView == null) {

            convertView = new View(...);

        }
...
每次调用getView()时都不会创建新的视图。

答案 1 :(得分:2)

最后,我选择了NOSTRA提供的解决方案:

Lazy load of images in ListView

效果很好。

答案 2 :(得分:1)

我不在Android中编码,但我建议使用懒惰的可见性方法。 所有图像看起来都是相同的尺寸,因此处理滚动事件并仅显示当前视锥体(屏幕)上可见的图像,同时隐藏其余图像。

我的猜测是,Android正在对滚动期间无法看到的图像使用其处理能力,从而导致抖动。

答案 3 :(得分:0)

首先,不要将所有位图保留在内存private Bitmap[] mBitmap;中。这可能是你的应用程序崩溃的原因。使用BitmapFactory从文件系统中读取它们。

其次,您不应该在适配器中缩放图像,这很昂贵:

imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);

尝试使用一组不需要缩放的图像。