2013-04-14 36 views
0

我有一個帶有4列和n行的GridView。每個單元格只是一個ImageView。我的自定義適配器的getView()的代碼如下所示:ImageView Scale類型在GridView中不正確

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ImageView imageView; 
    if (convertView == null) { // if it's not recycled, initialize some attributes 
     imageView = new ImageView(mContext); 
    } else { 
     imageView = (ImageView) convertView; 
    } 
    imageView.setLayoutParams(new GridView.LayoutParams(100, 100)); 
    imageView.setScaleType(ImageView.ScaleType.FIT_XY); 
    imageView.setPadding(1, 1, 1, 1); 
    //imageView.setAdjustViewBounds(true); 

    if(imageLoader != null) { 
     String url = randomImage(); 
     imageView.setContentDescription(url); 
     imageLoader.DisplayImage(url, imageView); 
    } 
    return imageView; 
} 

的ImageLoader的會選擇一個隨機的網址,並在後臺,去把它拿來並相應更新ImageView的。這工作正常和丹迪。問題是生成的圖像似乎使用FIT_START的縮放類型而不是FIT_XY。我明確地將其設置爲FIT_XY,甚至在設置imageView的drawable的代碼中再次設置它...仍然不是FIT_XY,我很難過。想法?

編輯刪除對setAdjustViewBounds()的調用。

+0

因爲您使用adjustViewBounds屬性重寫了該值。你真的*想要* FIT_XY嗎?我問,因爲這是一個極端的情況,你真的想要不成比例地拉伸。如果您希望圖像適合100x100以內,請改爲使用CENTER_CROP。 – kcoppock

+0

啊,我在測試中加入了adjustViewBounds。拿出來,也改爲CENTER_CROP,我得到了同樣的結果。在我的情況下,FIT_XY可以,因爲我保證在縮放之前每個圖像都是300x300。所以,它仍然不能正確顯示...其他想法? – sjwoodr

+1

FIT_XY會工作,是的,但FIT_CENTER或CENTER_CROP會有相同的結果,並確保不會因爲某些原因導致大小錯誤的圖像進入而中斷。您是否有截圖,瞭解發生了什麼? – kcoppock

回答

0

所以我剛發現這個問題。我使用Romain Guy的代碼從位圖創建RoundedDrawable - 獲得圓角,ala iOS,如下所示:curious-creature.org/2012/12/11/... ...當我跳過RoundedDrawable轉換時,它工作正常。 RoundedDrawable代碼中的一些東西就是拋棄這些東西。我只需要找到另一種方法來圓角的ImageView的角落。我現在正在使用CENTER_CROP,感謝@ kcoppock! :)

+0

顯示的getRoundedCornerBitmap()[here](http://stackoverflow.com/questions/2459916/how-to-make-an-imageview-to-have-rounded-corners)沒有問題。 – sjwoodr