Ответ 1
Если вы хотите круговое изображение, вы можете изменить .displayer(new RoundedBitmapDisplayer(25))
на .displayer(new RoundedBitmapDisplayer(1000))
, который работал у меня.
Я использую последний файл 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(new RoundedBitmapDisplayer(25))
на .displayer(new RoundedBitmapDisplayer(1000))
, который работал у меня.
Если вам нужно закругленное изображение, вам нужно установить округленный растровый дисплей в радиус изображения, которое в вашем случае равно 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();
Но, вероятно, это не очень хорошая идея для жесткого кода, я бы изменил конфигурацию, когда вы действительно получите растровое изображение и вычислите ширину.
Я нашел RoundedBitmpDisplayer довольно медленным даже с последним переписыванием. Безусловно, самый быстрый способ, с помощью которого я нашел округленные углы, - использовать RoundedImageView. https://github.com/vinc3m1/RoundedImageView Вы можете передать этот вид в UIL, и представление позаботится о округлении углов для вас. Вы просто указываете нужный радиус.
Как 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);
Итак, если вам не нужно многому использовать параметры кеша, используя Picasso вместо Universal Image Loader с RoundedImageView, это лучший вариант.
Решение Тима хорошее, но в моем случае, если изображение больше, чем выше, изображение более овальное, чем круг. Попробуйте этот код, он работает с каждым размером изображения:
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);
Используйте .displayer(new CircleBitmapDisplayer())
в DisplayImageOptions
вместе с
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
в вашем модульном уровне build.gradle.