Die benutzerdefinierte ImageView-Klasse funktioniert nicht mit der Picasso-Bibliothek zum Herunterladen von Bildern

Ich habe kürzlich von einer ImageView-Klasse eine CircularImageView-Klasse erstellt, die das Bild mit einem farbigen Rand kreisförmig macht. Dies erfolgt über die onDraw (canvas) -Methode, indem auf die Zeichenfläche gezeichnet wird, die übergeben wird:

//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);
    }   

Dieses Bit funktioniert also, wenn das Bild über eine Zeichen- oder Bitmapeinstellung festgelegt wird. Ich habe es auch erweitert, damit ich es mit Googles Volley NetworkImageView verwenden kann, das auch funktioniert.

Mein Problem tritt auf, wenn ich meine CircularImageView-Klasse neben der Picasso-Bibliothek zum Herunterladen von Bildern versuche, da ich sie als Alternative zu Volley betrachte. Was auftritt, ist eine ClassCastException in meiner loadBitmap () - Funktion in der ersten Zeile, wenn das BitmapDrawable abgerufen wird.

private void loadBitmap()
{
    BitmapDrawable bitmapDrawable = (BitmapDrawable) this.getDrawable();

    if(bitmapDrawable != null)
        image = bitmapDrawable.getBitmap();
}

Bevor Picasso das Bild heruntergeladen hat, rundet es zunächst das Platzhalterbild. Sobald das Bild von Picasso heruntergeladen wurde, schlägt es jedoch mit einer ClassCastException fehl, da getDrawable () und PicassoDrawable anstelle von BitmapDrawable zurückgegeben werden.

Ich möchte weiterhin daran arbeiten, das Bild in der onDraw (canvas) -Methode in meiner CircularImageView-Klasse zu runden, da es gut enthalten und automatisch ist und nicht jedes Mal beim Einrichten von ImageView mit Picasso ausgeführt wird. Ist das möglich?

Danke im Voraus.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage