Java 在GridView中滚动时,ImageView更改了位置
我有一个非常令人沮丧的问题,我不知道哪里出了问题。 我构建了只包含GridView的简单XML。这个gridview应该显示从我用代码检索的特定URL下载的图像(ImageView) 因此,这个应用程序的想法只是从URL下载图像,并在GridView中显示这些图像。首先,我必须说我使用的是通用图像加载器库。首先请查看我的getView代码:Java 在GridView中滚动时,ImageView更改了位置,java,android,gridview,universal-image-loader,Java,Android,Gridview,Universal Image Loader,我有一个非常令人沮丧的问题,我不知道哪里出了问题。 我构建了只包含GridView的简单XML。这个gridview应该显示从我用代码检索的特定URL下载的图像(ImageView) 因此,这个应用程序的想法只是从URL下载图像,并在GridView中显示这些图像。首先,我必须说我使用的是通用图像加载器库。首先请查看我的getView代码: @Override public View getView(int position, View convertView, ViewGrou
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView iv;
if(convertView == null) {
iv = new ImageView(MyActivity.this);
iv.setLayoutParams(new GridView.LayoutParams(size,size));
iv.setScaleType(ImageView.ScaleType.CENTER_CROP);
Log.d("APP", "convertView is NULL");
}
else {
iv = (ImageView) convertView;
Log.d("APP", "convertView is NOT null");
}
loader.displayImage(URLS.get(position), iv);
return iv;
}
问题:
上面的代码可以工作,并在GridView中显示图像。但当我向下滚动时,我看到:
谢谢你的帮助。非常感谢。GridView出于性能目的回收列表项。因此,当您滚动时,列表项会在不同的位置循环使用,然后您的代码会重新填充它们。有时这会滞后于图像
我建议使用处理这类事情的库。GridView出于性能目的回收列表项。因此,当您滚动时,列表项会在不同的位置循环使用,然后您的代码会重新填充它们。有时这会滞后于图像
我建议使用一个库来处理这类事情。Loader需要一些时间才能在
ImageView
中加载Picture。因为对不同的图像重用视图,所以在加载新图像时,可以在视图中看到以前的图像。您可以在DisplayImageOptions
中设置resetViewBeforeLoading(true)
,以避免这种效果
您还可以使用磁盘缓存来避免每次从网络下载图像。还可以限制内存缓存的大小并设置其他设置,但我认为内存缓存很有用,它可以改善用户体验。
不要忘记使用
setOnScrollListener(新的PauseOnScrollListener(loader,true,true))
以避免滚动延迟。loader需要一些时间才能在图像视图中加载图片。因为对不同的图像重用视图,所以在加载新图像时,可以在视图中看到以前的图像。您可以在DisplayImageOptions
中设置resetViewBeforeLoading(true)
,以避免这种效果
您还可以使用磁盘缓存来避免每次从网络下载图像。还可以限制内存缓存的大小并设置其他设置,但我认为内存缓存很有用,它可以改善用户体验。
不要忘记使用setOnScrollListener(新的PauseOnScrollListener(loader,true,true))
来避免滚动延迟。我遇到了与您完全相同的问题,也不想禁用convertView检查。
我的解决方案是在ImageLoaderConfiguration中增加内存缓存大小
以前,我经常这样使用它:
.memoryCache(新的使用FreqLimitedMemoryCache(2*1024*1024))
所以我把它改成:
.memoryCache(新的使用FreqLimitedMemoryCache(10*1024*1024))
我不知道10*1024*1024是否太多,或者它会导致任何问题,但它似乎已经解决了我的问题,我到目前为止还没有遇到任何问题。我遇到了与您完全相同的问题,也不想禁用convertView检查。
我的解决方案是在ImageLoaderConfiguration中增加内存缓存大小
以前,我经常这样使用它:
.memoryCache(新的使用FreqLimitedMemoryCache(2*1024*1024))
所以我把它改成:
.memoryCache(新的使用FreqLimitedMemoryCache(10*1024*1024))
我不知道10*1024*1024是否太多,或者是否会导致任何问题,但它似乎已经解决了我的问题,我到目前为止还没有遇到任何问题。谢谢您的回答。但这不是很奇怪吗,因为我认为universal image loader就是为了这个目的而创建的。但我会看看你们的图书馆。谢谢你们的回答。但这不是很奇怪吗,因为我认为universal image loader就是为了这个目的而创建的。但我会看看你的图书馆。