Niestandardowa klasa ImageView nie działa z biblioteką pobierania obrazów Picasso
Ostatnio rozszerzyłem z ImageView, aby utworzyć klasę CircularImageView, która sprawia, że obraz jest okrągły z kolorową ramką. Odbywa się to za pomocą metody onDraw (canvas), rysując na płótnie, które jest przekazywane:
//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);
}
Ten bit działa przy ustawianiu obrazu za pomocą szuflady lub mapy bitowej. Rozszerzyłem go, więc mogę go używać z Google Volley NetworkImageView, który również działa.
Mój problem pojawia się, gdy próbuję i my, moja klasa CircularImageView, obok biblioteki pobierania obrazów Picassa, patrząc na to jako alternatywę dla Volleya. Występuje wyjątek ClassCastException w mojej funkcji loadBitmap () w pierwszym wierszu podczas pobierania BitmapDrawable.
private void loadBitmap()
{
BitmapDrawable bitmapDrawable = (BitmapDrawable) this.getDrawable();
if(bitmapDrawable != null)
image = bitmapDrawable.getBitmap();
}
Początkowo, zanim Picasso pobrał zdjęcie, zaokrągla obraz zastępczy w porządku. Ale gdy tylko obraz zostanie pobrany przez Picassa, kończy się niepowodzeniem z wyjątkiem ClassCastException, ponieważ zwraca getDrawable (), a PicassoDrawable zamiast BitmapDrawable.
Chciałbym kontynuować pracę nad zaokrąglaniem obrazu w metodzie onDraw (canvas) w mojej klasie CircularImageView, ponieważ jest ona ładnie zamknięta i automatyczna w przeciwieństwie do wykonywania procesu podczas konfigurowania ImageView za pomocą Picassa za każdym razem. czy to możliwe?
Z góry dziękuję.