在Android中使用GridView进行异步位图缓冲

时间:2014-11-09 14:37:35

标签: android gridview asynchronous bitmap

我正在构建一个应用程序构建的图像网格。它的工作原理如下:

  1. 建立一个图像ID列表,我必须使用不同的内容提供商进行查询(这些是来自MMS线程的图像)
  2. 创建新活动,其中包含ImageGridFragment。这个片段有一个自定义适配器,它接受图像网格,并以异步方式将每个图像作为位图加载。
  3. 加载图像后,它们被缓存在LRU缓存中,因此我不需要运行不必要的计算
  4. 到目前为止,一切运作良好。但是,我想预先缓冲图像,以便当用户向下滚动时,他/她不必等待图像加载。它们应该已经装好了。 Android Gallery完成了库存。我已经看过消息来源,但认为必须有一种更直接的方式。

    回答会员'问题

    1. 使用content://mms/part/xxx逐个加载图片,其中xxx是图片的ID。这些是彩信图像,据我所知,不能作为批处理加载(但也许我错了)。我在AsyncTask中使用内容提供商来加载每张图片
    2. 我尝试了以下内容:

      1. 在创建片段时,向前缓冲30张图像。这不是理想的,因为大量的I / O请求实际上阻止了屏幕上的图像快速加载(但缓冲确实运行良好!)
      2. 检测所请求的加载视图何时位于屏幕的右下角,这可能会起作用,但如果GridView仅占用屏幕的一部分,则会失败。似乎应该有一个更清洁的方法来做到这一点
      3. 考虑但未尝试OnScrollListener,但这不会预先缓冲图像,直到我开始滚动,这是不理想的
      4. 所以,我的问题是:

        1. 有没有一种好方法可以检测何时请求加载最后一个GridView 项?我发现GridView.getlastvisibleposition()方法在这里没用,因为它实际上返回了为其调用Adapter.getView()的最后一个元素。如果我能准确地做到这一点,我可以在那时启动缓冲请求

        2. 有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

  1. 你可以做到这一点

    if(GridView.getlastvisibleposition()= mAdapter.count() - 1)

  2. 如何加载图片? 是来自URL还是来自SD卡? 你在使用图片加载器库吗?

相关问题