Clase de ImageView personalizada que no funciona con la biblioteca de descarga de imágenes de Picasso

Recientemente he extendido desde un ImageView para crear una clase CircularImageView que hace circular la imagen con un borde coloreado. Esto se realiza a través del método onDraw (lienzo) dibujando sobre el lienzo que se pasa:

//load the bitmap loadBitmap(); // init shader if(image !=null) { shader = new BitmapShader(Bitmap.createScaledBitmap(image, viewWidth + (borderWidth * 2), viewHeight + (borderWidth * 2), true), Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); paint.setShader(shader); int circleCenter = viewWidth / 2; // circleCenter is the x or y of the view's center // radius is the radius in pixels of the cirle to be drawn // paint contains the shader that will texture the shape canvas.drawCircle(circleCenter + borderWidth, circleCenter + borderWidth, circleCenter + borderWidth, paintBorder); canvas.drawCircle(circleCenter + borderWidth, circleCenter + borderWidth, circleCenter, paintBackground); canvas.drawCircle(circleCenter + borderWidth, circleCenter + borderWidth, circleCenter, paint); } 

Así que este bit funciona cuando se configura la imagen a través de un mapa de bits o dibujable. También lo he extendido para que pueda usarlo con Volley NetworkImageView de Google, que también funciona.

Mi problema viene cuando intento y nosotros mi clase de CircularImageView junto a la biblioteca que descarga de la imagen de Picasso mientras que la miro como alternativa a Volley. Lo que ocurre es una ClassCastException en mi función loadBitmap () en la primera línea al obtener BitmapDrawable.

 private void loadBitmap() { BitmapDrawable bitmapDrawable = (BitmapDrawable) this.getDrawable(); if(bitmapDrawable != null) image = bitmapDrawable.getBitmap(); } 

Initally antes de Picasso ha descargado la imagen redondea la imagen de marcador de posición muy bien. Pero tan pronto como la imagen ha sido descargada por Picasso falla con una ClassCastException como devuelve getDrawable () y PicassoDrawable en lugar de un BitmapDrawable.

Me gustaría mantener el trabajo para redondear la imagen en el método onDraw (lienzo) en mi clase CircularImageView, ya que está bien contenido y automático en lugar de hacer el proceso al configurar el ImageView con Picasso cada vez. es posible?

Gracias por adelantado.

2 Solutions collect form web for “Clase de ImageView personalizada que no funciona con la biblioteca de descarga de imágenes de Picasso”

Para las imágenes circulares utilizando Picasso, utilice esta clase que implemente la transformación.

 Picasso.with(context).load(url).transform(new RoundedTransformation(radius, margin)).into(imageview); 

Al hacer esto con Picasso usted debe:

  1. Aplicar el redondeo como una Transformation para que el mapa de bits redondeado se almacena en memoria caché o
  2. Sujete el lienzo con un sombreador en una subclase personalizada ImageView . Detalles sobre esta técnica fueron esbozados por el ragin 'cagin' Romain Guy en su blog

Tratar de extraer el Bitmap de Bitmap subyacente de un ImageView es un anti-patrón. Si necesitas tener acceso a un Bitmap (y no lo hagas, deberías usar uno de los anteriores), implementa el Target en la vista cuya onBitmapSuccess llamada onBitmapSuccess lo proporcionará.

  • Picasso imagen cargando
  • Android Picasso Configurar el tamaño de LruCache
  • ¿Es posible descargar imágenes de la memoria caché en picasso?
  • Obteniendo el ancho y altura de la imagen con la biblioteca picasso
  • Transición de elementos compartidos de Android: transformación de un ImageView de un círculo a un rectángulo y viceversa
  • Picasso no carga la imagen
  • ¿Cómo puedo configurar la imagen de fondo con picasso en el código
  • Descargar y guardar imágenes con Picasso
  • Pinzado de certificado SSL con Picasso
  • Android Square Picasso no carga persa imagen de carácter url
  • ¿Cómo funciona la caché HTTP de Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.