2014-02-06 96 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。