2014-02-06 138 views
12

我正在使用最新的universal-image-loader-1.9.2-SNAPSHOT-with-sources.jar文件。它的工作正常。我想將圖像更改爲圓形(圓形)。我使用了以下顯示選項。通用圖像加載器roundedBitmapDisplayer問題

   DisplayImageOptions userimgoptions = new DisplayImageOptions.Builder() 
          .displayer(new RoundedBitmapDisplayer(35)) 
          .showImageOnLoading(android.R.color.transparent) 
          .showImageForEmptyUri(R.drawable.picture_info_profile_img) 
          .showImageOnFail(R.drawable.picture_info_profile_img) 
          .cacheInMemory(true).cacheOnDisc(true) 
          .bitmapConfig(Bitmap.Config.RGB_565).build(); 

它不適用於某些圖像。我已經測試了這個低分辨率和高分辨率的不起作用。

注意:在我的xml Imageview高度和(55 * 55)。

enter image description hereenter image description here enter image description hereenter image description here

請您幫助我如何解決這個問題。我無法解決這個問題。

感謝,

+0

在該庫中,它爲圓角位圖顯示提供了屬性。你檢查過了嗎? – Piyush

回答

17

如果你願意,你可以改變.displayer(new RoundedBitmapDisplayer(25)).displayer(new RoundedBitmapDisplayer(1000))這爲我工作的圓形圖像。

+0

也適用於我。謝謝。 –

+0

設置圖像視圖寬度(寬度=高度)爲我工作。 – Raviprakash

+0

感謝我的工作 – Nicky

10

如果你想有一個圓形的圖像,你需要圓形的位圖顯示器設置而你的情況是1/2 55或27.5

DisplayImageOptions userimgoptions = new DisplayImageOptions.Builder() 
         .displayer(new RoundedBitmapDisplayer((int) 27.5f)) 
         .showImageOnLoading(android.R.color.transparent) 
         .showImageForEmptyUri(R.drawable.picture_info_profile_img) 
         .showImageOnFail(R.drawable.picture_info_profile_img) 
         .cacheInMemory(true).cacheOnDisc(true) 
         .bitmapConfig(Bitmap.Config.RGB_565).build(); 

圖像的半徑,但它可能不是一個好主意硬代碼,我會改變配置時,你實際得到的位圖和計算寬度。

+0

我從API獲得120 * 120像素。所有的圖像將相同的尺寸 –

+0

然後將圓角位圖顯示器設置爲60.如果你想在任何東西的圓形圖像的邊界大小就是半徑。 – Brian

6

我發現RoundedBitmpDisplayer即使是最新的重寫也很慢。到目前爲止,我發現獲得一個圓角的最快方法是使用RoundedImageView。 https://github.com/vinc3m1/RoundedImageView您可以將該視圖傳遞給UIL,並且該視圖將照顧爲您四捨五入。你只需指定你想要的半徑。

4

由於kingargyle使用RoundedImageView是最好的方法說,你可以只是在做這個實現你想要的:

Transformation transformation = new RoundedTransformationBuilder() 
      .borderColor(Color.BLACK) 
      .borderWidthDp(3) 
      .cornerRadiusDp(30) 
      .oval(false) 
      .build(); 

Picasso.with(context) 
    .load(url) 
    .fit() 
    .transform(transformation) 
    .into(imageView); 

所以,如果你不需要costumize大量的高速緩存選項,使用畢加索而不是通用圖像加載器RoundedImageView這是最好的選擇。

+0

是否應該有'iRadiusDp'中的空間?這是說它無法解決這個方法。 –

+1

@PatMyron方法是cornerRadiusDp。不記得我爲什麼寫「iRadiusDp」。 – GuilhE

1

蒂姆的解決方案是好的,但在我的情況下,如果圖像更大,那麼圖像更高,比圓形更橢圓。 試試這個代碼,它的工作原理與每一個圖像尺寸:

public class CircleBitmapDisplayer extends RoundedBitmapDisplayer { 


public CircleBitmapDisplayer() { 
    super(0); 
} 

@Override 
public void display(Bitmap bitmap, ImageAware imageAware, LoadedFrom loadedFrom) { 
    if (!(imageAware instanceof ImageViewAware)) { 
     throw new IllegalArgumentException("ImageAware should wrap ImageView. ImageViewAware is expected."); 
    } 

    imageAware.setImageDrawable(new CircleDrawable(bitmap, margin)); 
} 

public static class CircleDrawable extends RoundedDrawable { 

    private Bitmap mBitmap; 

    public CircleDrawable(Bitmap bitmap, int margin) { 
     super(bitmap, 0, margin); 
     this.mBitmap = bitmap; 
    } 

    @Override 
    public void draw(Canvas canvas) { 
     int radius = 0; 
     if(mBitmap.getWidth() > mBitmap.getHeight()) { 
      radius = mBitmap.getHeight()/2; 
     }else { 
      radius = mBitmap.getWidth()/2; 
     } 
     canvas.drawRoundRect(mRect, radius, radius, paint); 
    } 
} 
} 

使用它作爲一個正常的顯示器:

DisplayImageOptions options = new DisplayImageOptions.Builder() 
        .displayer(new CircleBitmapDisplayer()) 
        .cacheInMemory(true) 
        .cacheOnDisk(true) 
        .build(); 
ImageLoader.getInstance().displayImage(url, imageView,options); 
+0

作品像魅力)謝謝 –

0

使用.displayer(new CircleBitmapDisplayer())在DisplayImageOptions

隨着

compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5' 

在你模塊級別build.gradle。