2011-09-26 68 views
2

我試着從here得到的例子。該示例顯示瞭如何顯示比屏幕更大的圖像,以及屏幕如同窗口一樣,允許用戶通過滾動來查看圖像。然而,我想要達到的是類似的,而不是一個單一的圖像,我試圖將18個較小的圖像(171X205)組合成一個單一的圖像。我能夠做到這一點,但爲了節省從服務器下載圖像的加載時間,我緩存了圖像。繼承人的問題,我似乎無法在屏幕上顯示圖像,即使圖像確實緩存。因此,我通過從可繪製文件夾中提取圖像嘗試了其他方法,但仍出現同樣的問題。有沒有人有任何想法如何去解決這個問題?從緩存中加載圖片但返回空白屏幕

的碼A片段從緩存中加載的圖像:

for(int i =0; i<18; i++) 
    File cacheMap = new File(context.getCacheDir(), smallMapImageNames.get(i).toString()); 
      if(cacheMap.exists()){ 
       //retrieved from cached 
        try { 
         FileInputStream fis = new FileInputStream(cacheMap); 
         Bitmap bitmap = BitmapFactory.decodeStream(fis) 
         puzzle.add(bitmap); 
        }catch(...){} 
      }else{ 
       Drawable smallMap = LoadImageFromWebOperations(mapPiecesURL.get(i).toString()); 
       if(i==0){ 
        height1 = smallMap.getIntrinsicHeight(); 
        width1 = smallMap.getIntrinsicWidth(); 
       } 
       if (smallMap instanceof BitmapDrawable) { 
        Bitmap bitmap = ((BitmapDrawable)smallMap).getBitmap(); 
        FileOutputStream fos = null; 
        try { 
         cacheMap.createNewFile(); 
         fos = new FileOutputStream(cacheMap); 
         bitmap.compress(CompressFormat.JPEG, 100, fos); 
         fos.flush();  
         fos.close(); 
        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        }  

        puzzle.add(bitmap); 
       } 
      } 
} 

那裏檢索到的圖像從所述服務器的功能

private Drawable LoadImageFromWebOperations(String url) { 
     // TODO Auto-generated method stub 
     try 
     { 
      InputStream is = (InputStream) new URL(url).getContent(); 
      Drawable d = Drawable.createFromStream(is, "src name"); 
      return d; 
     }catch (Exception e) { 
      System.out.println("Exc="+e); 
      return null; 
     } 
    } 

我繪製到畫布上,因此沒有ImageView的是用於顯示圖像。

+0

我爲我的一些項目使用緩存。發佈您用於緩存每個映像下載時的代碼。併發布您從緩存中檢索它們的代碼。 –

+0

其實是對的[這裏](http://stackoverflow.com/q/7543928/918197) – user918197

+0

好吧快問一下。你是如何加載圖像?像從18個獨立的網址?我經常使用緩存,並且可能有更簡單的方法。 –

回答