2010-08-20 101 views
1

我正在開發一款android應用程序,它基本上訪問給定的url並下載圖像。在Android中的縮略圖視圖

現在我想填充這個下載的圖像,並在縮略圖視圖中顯示它。

我試過了從SD卡顯示相同,但​​是當我對下載的文件做同樣的事情時,它似乎不工作。

public View getView(int position,View convertView,ViewGroup parent)     
{ 
    System.gc(); 
    ImageView i = new ImageView(mContext.getApplicationContext()); 
    if (convertView == null)  
    { 
      //imagecursor.moveToPosition(position); 
      //int id = imagecursor.getInt(image_column_index); 
      //i.setImageURI(Uri.withAppendedPath(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, ""+ id)); 
      i.setImageBitmap(bitmap); 
      i.setScaleType(ImageView.ScaleType.FIT_CENTER); 
      i.setLayoutParams(new GridView.LayoutParams(100, 100)); 
    } 
    else 
    { 
     i = (ImageView) convertView; 
    } 
    return i; 
} 
+0

你想從SD卡或從數據庫在這種情況下,填充的圖像? – DeRagan 2010-08-20 13:03:19

+0

上述兩個選項都沒有說過。 我希望我的應用程序在特定的jpg鏈接上,並且該圖像應該在縮略圖視圖中填充到我的應用程序中。 – Yaaga 2010-08-20 13:08:12

回答

1

您也可以下載文件,並使用URL,HttpConnection的&的InputStream/Outputsteam其寫入存儲。一旦下載完成,您可以在ImageView中顯示它。

我已經做到了這一點使用的AsyncTask:

@Override 
     protected Void doInBackground(URL... urls) { 
      for (int i = 0; i < urls.length; i++) { 

       try { 

        Pattern pattern = Pattern.compile("([a-zA-Z]*.[jpeg|png])$"); 
        Matcher matcher = pattern.matcher(urls[i].getFile()); 

        if (matcher.find()) { 

         URLConnection connection = urls[i].openConnection(); 
         int fileSize = connection.getContentLength(); 
         mFileName = matcher.group(); 

         String filePath = Environment 
           .getExternalStorageDirectory() 
           + File.separator + mFileName; 

         InputStream input = new BufferedInputStream(urls[i] 
           .openStream()); 

         OutputStream output = new FileOutputStream(filePath); 

         byte data[] = new byte[1024]; 

         long total = 0; 
         int count; 

         while ((count = input.read(data)) != -1) { 
          total += count; 
          int value = (int) (total * 100/fileSize); 
          output.write(data, 0, count); 
          onProgressUpdate(value); 
         } 

         output.flush(); 
         output.close(); 
         input.close(); 

         // Now display the image in your ImageView 

        } 

       } catch (IOException e) { 

        e.printStackTrace(); 
       } 
      } 
      return null; 
     }