Android 通用图像加载器roundedBitmapDisplayer问题

Android 通用图像加载器roundedBitmapDisplayer问题,android,universal-image-loader,Android,Universal Image Loader,我使用的是最新的universal-image-loader-1.9.2-SNAPSHOT-with-sources.jar文件。工作正常。我想将图像更改为圆形(圆形)。我使用了以下显示选项 DisplayImageOptions userimgoptions = new DisplayImageOptions.Builder() .displayer(new RoundedBitmapDisplayer(35))

我使用的是最新的universal-image-loader-1.9.2-SNAPSHOT-with-sources.jar文件。工作正常。我想将图像更改为圆形(圆形)。我使用了以下显示选项

             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图像中,查看高度和(55*55)。

请帮我解决这个问题。我不能解决这个问题


谢谢,

如果您想要圆形图像,您可以将
.displayer(新的圆形位图显示器(25))
更改为
.displayer(新的圆形位图显示器(1000))
,这对我很有效。

如果您想要圆形图像,您需要将圆形位图显示器设置为图像的半径,在您的情况下为1/255或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();

但是硬编码可能不是一个好主意,当您实际获取位图并计算宽度时,我会更改配置。

我发现RoundedBitmpDisplayer即使经过最新的重写也非常慢。到目前为止,我发现获得圆角的最快方法是使用RoundeMageView。您可以将该视图传递到UIL,该视图将为您处理圆角问题。您只需指定所需的半径。

正如kingargyle所说,使用是最佳方法,您只需执行以下操作即可实现所需:

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

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

因此,如果您不需要消耗大量缓存选项,使用毕加索而不是带有圆形图像视图的通用图像加载器是最好的选择。

Tim的解决方案很好,但在我的例子中,如果图像越大越高,则图像越呈椭圆形,而不是圆形。 请尝试此代码,它适用于每种图像大小:

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);
在DisplayImageOptions中使用
.displayer(新的CircleBitmapDisplayer())

连同

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

在该库中的模块级build.gradle.

中,它为圆角位图显示提供属性。你检查过了吗?我从API得到120*120像素。所有图像大小相同。然后将圆形位图显示器设置为60。如果你想在任何东西上画一个圆形的图像,边框的大小就是半径。“那个iradiudp”中应该有一个空格吗?这是说它无法解决该方法。@PatMyron该方法是USDP。不记得我为什么写了“iRadiusDp”。