RoundedImageView类库的核心内容就在于RoundedDrawable,所以今天就来分析RoundedDrawable的源码。
不了解RoundedImageView类库的朋友可以看看上一篇博客http://blog.csdn.net/wangdong20/article/details/50705051
首先看构造方法:
public RoundedDrawable(Bitmap bitmap) {
mBitmap = bitmap;
mBitmapWidth = bitmap.getWidth();
mBitmapHeight = bitmap.getHeight();
mBitmapRect.set(0, 0, mBitmapWidth, mBitmapHeight);
mBitmapPaint = new Paint();
mBitmapPaint.setStyle(Paint.Style.FILL);
mBitmapPaint.setAntiAlias(true);
mBorderPaint = new Paint();
mBorderPaint.setStyle(Paint.Style.STROKE);
mBorderPaint.setAntiAlias(true);
mBorderPaint.setColor(mBorderColor.getColorForState(getState(), DEFAULT_BORDER_COLOR));
mBorderPaint.setStrokeWidth(mBorderWidth);
}
我们可以看到RoundedDrawable的构造方法里传的参数是Bitmap, 其实后面会提到,RoundedDrawable可以把Drawable转化成Bitmap然后进行绘制,里面用到了2个Paint,分别是mBitmapPaint和mBorderPaint。一个用于绘制内部具体内容,一个用于绘制边框。
public static Drawable fromDrawable(Drawable drawable) {
if (drawable != null) {
if (drawable instanceof RoundedDrawable) {
// just return if it's already a RoundedDrawable
return drawable;
} else if (drawable instanceof LayerDrawable) {
LayerDrawable ld = (LayerDrawable) drawable;
int num = ld.getNumberOfLayers();
// loop through layers to and change to RoundedDrawables if possible
for (int i = 0; i < num; i++) {
Drawable d = ld.getDrawable(i);
ld.setDrawableByLayerId(ld.getId(i), fromDrawable(d));
}