CircularBitmapDrawablepublic class CircularBitmapDrawable extends ExtendedBitmapDrawable Custom BasicBitmapDrawable implementation for circular images.
This draws all bitmaps as a circle with an optional border stroke. |
Fields Summary |
---|
private static android.graphics.Matrix | sMatrix | private final android.graphics.Paint | mBitmapPaint | private final android.graphics.Paint | mBorderPaint | private float | mBorderWidth | private android.graphics.Bitmap | mShaderBitmap |
Constructors Summary |
---|
public CircularBitmapDrawable(android.content.res.Resources res, com.android.bitmap.BitmapCache cache, boolean limitDensity)
this(res, cache, limitDensity, null);
| public CircularBitmapDrawable(android.content.res.Resources res, com.android.bitmap.BitmapCache cache, boolean limitDensity, ExtendedOptions opts)
super(res, cache, limitDensity, opts);
mBitmapPaint.setAntiAlias(true);
mBitmapPaint.setFilterBitmap(true);
mBitmapPaint.setDither(true);
mBorderPaint.setColor(Color.TRANSPARENT);
mBorderPaint.setStyle(Style.STROKE);
mBorderPaint.setStrokeWidth(mBorderWidth);
mBorderPaint.setAntiAlias(true);
|
Methods Summary |
---|
protected void | onDrawBitmap(android.graphics.Canvas canvas, android.graphics.Rect src, android.graphics.Rect dst)
onDrawCircularBitmap(getBitmap().bmp, canvas, src, dst, 1f);
| protected void | onDrawCircularBitmap(android.graphics.Bitmap bitmap, android.graphics.Canvas canvas, android.graphics.Rect src, android.graphics.Rect dst)Call this method with a given bitmap to draw it onto the given canvas, masked by a circular
BitmapShader.
onDrawCircularBitmap(bitmap, canvas, src, dst, 1f);
| protected void | onDrawCircularBitmap(android.graphics.Bitmap bitmap, android.graphics.Canvas canvas, android.graphics.Rect src, android.graphics.Rect dst, float alpha)Call this method with a given bitmap to draw it onto the given canvas, masked by a circular
BitmapShader. The alpha parameter is the value from 0f to 1f to attenuate the alpha by.
// Draw bitmap through shader first.
BitmapShader shader = (BitmapShader) mBitmapPaint.getShader();
if (shader == null || mShaderBitmap != bitmap) {
shader = new BitmapShader(bitmap, TileMode.CLAMP, TileMode.CLAMP);
mShaderBitmap = bitmap;
}
sMatrix.reset();
// Fit bitmap to bounds.
float scale = Math.max((float) dst.width() / src.width(),
(float) dst.height() / src.height());
sMatrix.postScale(scale, scale);
// Translate bitmap to dst bounds.
sMatrix.postTranslate(dst.left, dst.top);
shader.setLocalMatrix(sMatrix);
mBitmapPaint.setShader(shader);
int oldAlpha = mBitmapPaint.getAlpha();
mBitmapPaint.setAlpha((int) (oldAlpha * alpha));
canvas.drawCircle(dst.centerX(), dst.centerY(), dst.width() / 2,
mBitmapPaint);
mBitmapPaint.setAlpha(oldAlpha);
// Then draw the border.
canvas.drawCircle(dst.centerX(), dst.centerY(),
dst.width() / 2f - mBorderWidth / 2, mBorderPaint);
| protected void | onDrawPlaceholderOrProgress(android.graphics.Canvas canvas, TileDrawable drawable)
BitmapDrawable placeholder = (BitmapDrawable) drawable.getInnerDrawable();
Bitmap bitmap = placeholder.getBitmap();
float alpha = placeholder.getPaint().getAlpha() / 255f;
sRect.set(0, 0, bitmap.getWidth(), bitmap.getHeight());
onDrawCircularBitmap(bitmap, canvas, sRect, getBounds(), alpha);
| public void | setAlpha(int alpha)
super.setAlpha(alpha);
final int old = mBitmapPaint.getAlpha();
mBitmapPaint.setAlpha(alpha);
if (alpha != old) {
invalidateSelf();
}
| public void | setBorderColor(int color)Set the border stroke color of this drawable. Set to {@link Color#TRANSPARENT} to disable.
final boolean changed = mBorderPaint.getColor() != color;
mBorderPaint.setColor(color);
if (changed) {
invalidateSelf();
}
| public void | setBorderWidth(float borderWidth)Set the border stroke width of this drawable.
final boolean changed = mBorderPaint.getStrokeWidth() != borderWidth;
mBorderPaint.setStrokeWidth(borderWidth);
mBorderWidth = borderWidth;
if (changed) {
invalidateSelf();
}
| public void | setColorFilter(android.graphics.ColorFilter cf)
super.setColorFilter(cf);
mPaint.setColorFilter(cf);
|
|