在显示列表视图的同时在后台下载图像

时间:2010-07-30 18:05:27

标签: android listview image

我有一个数组的所有URI的数组,我在列表中显示。 现在我想在后台运行一个线程,从web获取这些图像并将它们存储在SD卡上。 因此,当我单击列表中的特定元素而不是从Web获取时,它应该从新活动中的SD卡中获取。

我该怎么做?

3 个答案:

答案 0 :(得分:2)

可以尝试使用我的lazy-drawables框架(GPL v3许可):

https://github.com/rtyley/lazy-drawables

- 不幸的是它还没有为生产做好准备,但它试图处理的事情之中:

  • 后台(非UI线程)加载图像资源
  • 缩放位图的高效缓存 - 用于下载单个大图像的用例,并希望在列表视图中以较小的图标格式显示数百次
  • 使用的透明度,我的意思是......

...一旦你设置了一个懒惰的可绘制会话,填充图像视图就像这样简单:

Drawable avatarDrawable = imageSession.get(someUserIdentifier); // doesn't block
imageView.setImageDrawable(avatarDrawable);

你没有关心它可能已经立即返回你一个正常的bitmapdrawable,或者可能产生一个异步任务并返回一个占位符drawable - drawable将更新自己并且当async时它是主机ImageView任务已经完成。

无论如何,这就是理论。到目前为止似乎有点工作,但有时自发的UI更新不会发生......不确定原因: - }

答案 1 :(得分:0)

通过matthiaskäppler检查WebImageView

您可以使用所需的SD卡功能替换他的图像缓存方式。

答案 2 :(得分:0)

在显示您的用户界面时在后台使用AsyncTask下载

    File imageFile;

从网络保存图片

public View getView(int position, View convertView, ViewGroup parent) {    
    imageFile = new File("/sdcard/jorgesysTemp/" + Arraypicname(position);
    if(!imageFile.exists()){ 
     AsyncTaskProcess() //Download your images to sdcard
    }

单击列表视图时,从sdcard加载图像

    @Override
    protected void onListItemClick(ListView l, View v, final int position, long id) {
     //load from sdcard
        Bitmap bitmapImg = BitmapFactory.decodeFile("/sdcard/jorgesysTemp/" + Arraypicname(position));
        BitmapDrawable drawableImg = new BitmapDrawable(bitmapImg );                
        myimageview.setImageDrawable(drawableImg );
...
...
...