Ho recentemente esteso da ImageView per creare una classe CircularImageView che rende l'immagine circolare con un bordo colorato. Questo viene fatto tramite il metodo OnDraw (tela) disegnando sulla tela che viene passato in:Classe personalizzata ImageView non funzionante con la libreria di download di immagini Picasso
//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);
}
Quindi questo bit funziona quando si imposta l'immagine tramite un disegnabile o bitmap. L'ho anche esteso in modo da poterlo utilizzare con Volley NetworkImageView di Google, che funziona anche.
Il mio problema si presenta quando provo con noi la mia classe CircularImageView accanto alla libreria di download di immagini di Picasso mentre la sto guardando come alternativa a Volley. Ciò che accade è una classe ClassCastException nella mia funzione loadBitmap() sulla prima riga quando si ottiene BitmapDrawable.
private void loadBitmap()
{
BitmapDrawable bitmapDrawable = (BitmapDrawable) this.getDrawable();
if(bitmapDrawable != null)
image = bitmapDrawable.getBitmap();
}
Inizialmente prima che Picasso abbia scaricato l'immagine arrotonda perfettamente l'immagine del segnaposto. Ma non appena l'immagine è stata scaricata da Picasso, fallisce con una ClassCastException in quanto getDrawable() restituisce PicassoDrawable piuttosto che BitmapDrawable.
Mi piacerebbe mantenere il lavoro per arrotondare l'immagine nel metodo onDraw (canvas) nella mia classe CircularImageView in quanto è ben contenuta e automatica rispetto a fare il processo quando si imposta ImageView con Picasso ogni volta . È possibile?
Grazie in anticipo.
Questo crea una nuova bitmap ogni volta, no? – secureboot
Grazie a DesertIvy, droidx e Jake Wharton per l'aiuto. Il progetto per cui questo è stato messo in attesa è appena tornato al problema ora. Ho appena provato quanto sopra con opere semplicemente perfette. –