Cargador de imágenes universal roundedBitmapDisplayer issues
Estoy utilizando el último archivo universal-image-loader-1.9.2-SNAPSHOT-with-sources.jar. Su funcionamiento muy bien. Quiero cambiar la imagen a circular (Círculo). He utilizado las siguientes opciones de visualización.
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();
No funciona para algunas imágenes. He probado esto en baja y alta resolución no funciona.
- Universal-Image-Loader: mapas de bits erróneos se adjuntan a ImageView
- Repetición de imagen mientras se desplaza en la vista de cuadrícula de Android con Universal Image Loader
- Cargador de imágenes universal no puede cargar imágenes a veces
- Uso de Android-UIL, ¿Cómo detener la descarga?
- Uso correcto de Universal Image Loader
Nota: En mi xml Imageview altura y con (55 * 55).
Por favor ayúdenme cómo resolver este problema. No puedo resolver este problema.
Gracias,
- ¿Cómo forzar un borrado de caché con Universal Image Loader Android?
- Android - ImageLoader debe ser init con la configuración antes de usar en UIL
- Android-Universal-Image-Loader no mantiene las imágenes cargadas en desplazamiento en gridview
- Error de OutOfMemory del cargador de imágenes universal
- ¿Puede Universal loader de imágenes para Android trabajar con imágenes de sqlite db?
- Contenido dinámico en Maps V2 InfoWindow
- ¿Cómo puedo cambiar el tamaño de una imagen antes de mostrarla en una vista con Android Universal Image Loader?
- Carga perezosa de imágenes en ListView
Si quieres una imagen circular, puedes cambiar .displayer(new RoundedBitmapDisplayer(25))
a .displayer(new RoundedBitmapDisplayer(1000))
que funcionó para mí.
Si desea una imagen redondeada debe configurar el visualizador de mapa de bits redondeado al radio de la imagen que en su caso es 1/2 55 o 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();
Pero probablemente no es una buena idea para código duro que, yo cambiaría la configuración cuando realmente obtener el mapa de bits y calcular el ancho.
He encontrado el RoundedBitmpDisplayer a ser bastante lento, incluso con la última reescritura. De lejos, la forma más rápida que he encontrado para obtener un Rounded esquinas consistentemente es utilizar RoundedImageView. https://github.com/vinc3m1/RoundedImageView Puede pasar esa vista en UIL y la vista se encargará de redondear las esquinas para usted. Sólo tiene que especificar el radio que desea.
Como kingargyle dijo que usando RoundedImageView es el mejor enfoque y se puede lograr lo que quieres simplemente haciendo esto:
Transformation transformation = new RoundedTransformationBuilder() .borderColor(Color.BLACK) .borderWidthDp(3) .cornerRadiusDp(30) .oval(false) .build(); Picasso.with(context) .load(url) .fit() .transform(transformation) .into(imageView);
Por lo tanto, si no necesita personalizar muchas opciones de caché, usar Picasso en lugar de Universal Image Loader con RoundedImageView es la mejor opción.
La solución de Tim es buena pero en mi caso si la imagen es más grande entonces más alta la imagen es más oval que el círculo. Pruebe este código, funciona con cada tamaño de imagen:
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); } } }
Utilícelo como visualizador normal:
DisplayImageOptions options = new DisplayImageOptions.Builder() .displayer(new CircleBitmapDisplayer()) .cacheInMemory(true) .cacheOnDisk(true) .build(); ImageLoader.getInstance().displayImage(url, imageView,options);
Utilice .displayer(new CircleBitmapDisplayer())
en DisplayImageOptions
junto con
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
En tu nivel de módulo build.gradle.