Redondear ImageView

3,443 views
Skip to first unread message

Jefferson Delgado P.

unread,
Sep 30, 2013, 12:36:07 PM9/30/13
to desarrollad...@googlegroups.com
Buenas tardes,

Llevo rato buscando un método mediante el cual, mostrar un ImageView con los bordes curvos, y la imagen evidentemente, dentro de estos bordes.
He probado con:

<?xml version="1.0" encoding="utf-8"?>
    android:shape="rectangle" >

    <solid android:color="#ffffff" />

    <corners
        android:bottomLeftRadius="8dp"
        android:bottomRightRadius="8dp"
        android:topLeftRadius="8dp"
        android:topRightRadius="8dp" />

</shape>

Y darle como background dicho shape, pero la imagen se sale de los márgenes.

También he probado con la clase: 
public static Bitmap getRoundedCornerBitmap(Bitmap bitmap) {

Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
bitmap.getHeight(), Config.ARGB_8888);

Canvas canvas = new Canvas(output);

final int color = 0xff424242;

final Paint paint = new Paint();

final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());

final RectF rectF = new RectF(rect);

final float roundPx = 12;

paint.setAntiAlias(true);

canvas.drawARGB(0, 0, 0, 0);

paint.setColor(color);
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);

paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));

canvas.drawBitmap(bitmap, rect, rect, paint);

return output;
}

Que se ve que le funciona a todo el mundo, pero a mi me da error en la línea "Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(), Config.ARGB_8888);"

El error creo que es debido a que el Bitmap, no es de un drawable ni ningún recurso, sino de una imagen que busco en un servidor, sin guardarla en disco (supongo que estará en caché)

¿Alguna idea de como poder ponerle bordes curvos a un ImageView donde cargo una imagen de un servidor mediante:

bitmap = BitmapFactory.decodeStream((InputStream)new URL(URL).getContent());


Muchas gracias.


Un saludo



Gabriel Pozo

unread,
Sep 30, 2013, 1:06:44 PM9/30/13
to desarrollad...@googlegroups.com
Mira acá tenes un ejemplo completo, directamente de Romain Guy ;) (este es su blog, descarga del enlace todo el proyecto y mira bien como lo arma)
http://www.curious-creature.org/2012/12/11/android-recipe-1-image-with-rounded-corners/


Ahora el tema, es que le llega a decodeStream?
Entonces, tenes o no el bitmap para pasarlo a la función? (Logs ? ;))  Otra pregunta, olvídate de los bordes curvos, obtienes o no una imagen?




--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/20KhL
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a desarrolladores-a...@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.
Para ver este debate en la Web, visita https://groups.google.com/d/msgid/desarrolladores-android/6c0ce23c-3ecf-4d06-a4aa-62a8d0542f26%40googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.



--
Saludos, Gabriel

http://aprendiendodeandroidymas.com/

Jefferson Delgado P.

unread,
Oct 2, 2013, 8:00:29 AM10/2/13
to desarrollad...@googlegroups.com
Buenas!

Muchas gracias por los enlaces Gabriel, el último ha sido el que he usado y el que me ha servido.

Ahora bien, a raiz de esto, me está surgiendo otro problema a la hora de mostrar las imágenes.

Tengo una app con el tipo de Menú SlidingMenú (como el del facebook). Hay una opción que es listado, y en esa opción, cargo un listado desde un WebService, así como una serie de imágenes que no guardo en disco, sino que creo que se quedan en "caché".

Las descargo bien, aunque cuando subo y bajo por la lista, las imágenes se cambian, se duplican, etc., así como el movimiento de la lista no es muy fluido.
El otro "problema" que veo, es que cada vez que pico en listado, se baja nuevamente el listado, ralentizando la app, sobre todo, creo yo, por la carga de imágenes.

¿Hay algún modo de hacer el proceso más eficiente?

Tanto el listado como las imágenes, las descargo mediante un Asyntask; el listado en si en la clase, y las imágenes en el Adapter, concretamente en el getView.

Espero haberme explicado. Si necesitan ver código, lo pongo sin problemas.


Muchas gracias nuevamente.


Un saludo ;)
Reply all
Reply to author
Forward
0 new messages