2010-07-30 91 views
6

我有一个列表中显示的图像的所有URI的数组。 现在我想在后台运行一个线程,从web获取这些图像并将它们存储在SD卡上。 所以,当我点击列表中的某个元素而不是从网页抓取时,它应该从新的活动中从SD卡中获取。在显示列表视图的同时下载图像

我该怎么做?

+0

阅读本线,有很多的信息。 http://stackoverflow.com/questions/541966/android-how-do-i-do-a-lazy-load-of-images-in-listview 我更喜欢Android系统的通用 - 图片 - 装载机库的https:/ /github.com/nostra13/Android-Universal-Image-Loader,但您也可以找到其他解决方案。希望能帮助到你。 – 2012-08-10 12:08:52

回答

0

检查WebImageView matthiaskäppler。

你可以用你想要的SDcard功能代替他缓存图像的方式。

0

使用AsyncTask在后台下载,同时显示你的UI

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 
    } 

当您点击列表视图从SD卡加载图像

@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); 
... 
... 
...  
2

可能尝试使用我的lazy-drawa统计局框架(GPL V3行货):

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

-unfortunately它不是完全准备好生产还没有,但其中的东西它试图处理:

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

......一旦你有一个懒惰的抽拉会话建立,填充的形象图一样简单:

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

你不“T 护理它可能立即返回你一个正常的bitmapdrawable,或可能催生一个异步任务,并返回一个占位符绘制 - 提拉将更新本身和它的主机的ImageView当异步任务已经完成。

无论如何这就是理论。这似乎八九不离十,有点工作至今,但有时自发UI更新不会发生......不知道为什么: - }