我想要創建一個顯示大量圖像的圖庫。爲此,我創建了一個帶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));
修復了崩潰但仍不能解決縮放問題。