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á.

  • Imágenes que no se cargan con Picasso sin error
  • ¿Cómo usar WebView con Picasso?
  • Gestión de la memoria de Android: Densidad de pantalla, tamaños de imagen solicitados y montón disponible
  • Guardar imagen de url usando Picasso?
  • ¿Está bien crear una nueva instancia de picasso cada vez
  • Uso de Picasso para cargar una imagen en un mapa de bits
  • Picasso y adaptador con viewHolder
  • Conseguir que Picasso recupere las imágenes futuras
  • ¿Cómo uso la caché de disco en Picasso?
  • HorizontalGridView / RecyclerLa posición de desplazamiento se restablece una vez que la imagen de Picasso se carga
  • No puedo almacenar en caché las imágenes mientras que bindind la imagen usando MvvmCross
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.