最近、ImageView から拡張して、色付きの境界線で画像を円形にする CircularImageView クラスを作成しました。これは、渡されたキャンバスに描画することにより、 onDraw(canvas) メソッドを介して行われます。
//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);
}
したがって、このビットは、ドローアブルまたはビットマップを介して画像を設定するときに機能します。また、拡張したので、Google の Volley NetworkImageView でも使用できます。
ボレーの代替として見ているので、Picasso画像ダウンロードライブラリと一緒にCircularImageViewクラスを試してみると、私の問題が発生します。BitmapDrawable を取得するときに、最初の行の loadBitmap() 関数で ClassCastException が発生します。
private void loadBitmap()
{
BitmapDrawable bitmapDrawable = (BitmapDrawable) this.getDrawable();
if(bitmapDrawable != null)
image = bitmapDrawable.getBitmap();
}
ピカソが画像をダウンロードする前に、最初にプレースホルダー画像を丸めます。しかし、画像が Picasso によってダウンロードされるとすぐに、getDrawable() が BitmapDrawable ではなく PicassoDrawable を返し、ClassCastException で失敗します。
Picasso で ImageView を設定するたびにプロセスを実行するのではなく、CircularImageView クラスの onDraw(canvas) メソッドで画像を丸める作業を維持したいと思います。これは可能ですか?
前もって感謝します。