2011-07-14 55 views
0

我想要創建一個顯示大量圖像的圖庫。爲此,我創建了一個帶ImageView的適配器類[3],並讓getView傳遞出ImageView [position%3]。我還將適配器設置爲使用異步加載的大型位圖填充ImageView。爲符合Android中圖庫高度的圖庫創建ImageViews

由於一個可能滾動更快的設備可以加載圖像,我也有一個更長的縮略圖數組(我也將最終用於縮略圖庫)。如果較大的位圖不可用,ImageView會使用縮略圖填充,然後在加載後使用大位圖重新填充。

因此,我的問題令人沮喪地變得微不足道:ImageView沒有按照我希望的方式進行縮放。理想的行爲是使ImageView的高度與其父級相同,但具有與其內容相同的高寬比。但是,如果我填充的ImageView []使用此代碼:儘快庫調用getView(

private void initializeStaticArrays() { 
     //initialize envelope arrays 
     for(int i=0; i<ENVELOPE_ARRAY_SIZE; ++i) 
     { 
      mEnvelopeViews[i] = new ImageView(mContext); 
//make the views as wide as their content and as tall as their parent 
      mEnvelopeViews[i].setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT)); 
//then make them scale the contained image 
      mEnvelopeViews[i].setScaleType(ImageView.ScaleType.FIT_CENTER); 
      mEnvelopeIds[i] = Gallery.INVALID_POSITION; 
      mBundles[i] = new BitmapFilePathBundle(); 
     } 
     for(int i=0; i<THUMBNAIL_ARRAY_SIZE; ++i) 
     { 
      mThumbnailViews[i] = new ImageView(mContext); 
      if(mThumbnailParams!=null) mThumbnailViews[i].setLayoutParams(new Gallery.LayoutParams(mThumbnailParams)); 
      mThumbnailViews[i].setScaleType(ImageView.ScaleType.FIT_CENTER); 
      mThumbnailIds[i] = Gallery.INVALID_POSITION; 
     } 
    } 

)崩潰(請注意,我所說的setImageBitmap其他地方的代碼和getView之前肯定已經發生了()叫做)。我會想象這是一個算術循環,就像試圖讓位圖拉伸以適合視圖一樣,該視圖試圖包含位圖,但我無法確定佈局參數的組合會給出我想要的結果。

所以:有沒有辦法讓ImageView的高度與其父母一樣高,其內容放大以適合正確的寬高比,並且ImageView的寬度與內容的寬度完全匹配?

編輯:崩潰是由LayoutParams到Gallery.LayoutParams的CastException引起的。將相應的行更改爲:

//make the views as wide as their content and as tall as their parent 
      mEnvelopeViews[i].setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT)); 

修復了崩潰但仍不能解決縮放問題。

回答

0

不幸的是,由於沒有任何自動縮放解決方案來解決這個問題,我最終手動調整了視圖的尺寸,然後使用對象來確定每個圖像如何適合這些尺寸。