2017-05-31 58 views
0

我正在使用GridView显示20个图像。我使用Glide在我创建的适配器中获取并显示来自Web的图像。问题是,如果所有图像都下载了,当我滚动网格视图时,我看到图像出现像动画一样的淡入淡出。我不'想要这个。如果我滚动得更快,我希望在gridview中加载所有图像而不会看到它们。Android GridView使用适配器加载图像和Glide

我试过使用diskcache()和dontAnimate(),但它没有解决我的问题。我认为问题在于我显示了gridview的4个单元格。当我滚动适配器调用getView来显示其他两个单元格,并删除我滚动的2。问题在于getview每次都需要时间来显示其他两个单元格,并且我看起来像加载的效果。我希望我的场景看起来像一个网格视图,其中存在并分配了所有20个单元格。

这是我的适配器:

public class ImagesAdapter extends BaseAdapter { 
private Context mContext; 
private ArrayList<Picture> images; 

public ImagesAdapter(Context context, int resource, ArrayList<Picture> inputImages) { 
    super(); 
    this.mContext = context; 
    this.images = inputImages; 
} 

@Override 
public int getCount() { 
    return images.size(); 
} 

@Override 
public Picture getItem(int position) { 
    return images.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return 0; 
} 

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

    View row = convertView; 
    ViewHolder holder = null; 

    if (row == null) { 
     row = LayoutInflater.from(mContext).inflate(R.layout.grid_item_layout, null); 
     holder = new ViewHolder(); 
     holder.imageView = (ImageView) row.findViewById(R.id.grid_item_image); 
     holder.id = images.get(position).getImageId(); 
     row.setTag(holder); 
    } 
    else { 
     holder = (ViewHolder) row.getTag(); 
     holder.id = images.get(position).getImageId(); 
    } 

    Picture pic = images.get(position); 
    Glide 
      .with(mContext) 
      .load(pic.getBigImageUrl()) 
      .into(holder.imageView); 

    return row; 
} 
public class ViewHolder { 
    ImageView imageView; 
    public String id; 
} 
} 

有人可以帮助我找到解决办法吗?感谢所有

+0

滑翔将试图下载你的图像,当他们即将出现在屏幕上。所以会有延迟,直到他们出现在你的牢房里。如果你不想延迟,你必须事先下载这些图像。如果Glide提供缓存选项,您的图像将第二次立即显示,但您将永远不得不等待它们第一次下载。 –

+0

是的,Glide正在第一次下载它们。但我的问题不是第一次。第二次,我确认图像全部下载,即使全部下载,在滚动上它们都不会立即显示。 – denno

回答

0

试试这个

Glide 
.with(mContext) 
.load(pic.getBigImageUrl()) 
.placeholder(R.drawable.defaultImage) 
.into(holder.imageView); 

到knoow更多关于云燕滑翔单击herehere

0

您应该添加磁盘高速缓存策略从缓存中加载图像。 你可以使用SOURCE或RESULT; SOURCE保存原始数据以缓存并RESULT保存所有转换到缓存后的媒体项目。 例如:。

Glide 
.with(mContext) 
.load(pic.getBigImageUrl()) 
.diskCacheStrategy(DiskCacheStrategy.SOURCE) 
.into(holder.imageView); 
+0

我无法在适配器中使用.diskCacheStrategy :( – denno

0

尝试此 Glide.with(mContext).load(pic.getBigImageUrl())diskCacheStrategy(DiskCacheStrategy.SOURCE).dontAnimate()代入(holder.imageView);

+0

我无法在适配器中看到.diskCacheStrategy和.dontAnimate(): – denno

+0

您是否有此版本的gradle中的滑动? – Vij

+0

compile'c​​om.github.bumptech.glide:glide :3.7.0' – Vij

相关问题