Android默认的ImageView是矩形的,为了达到圆形的目的,需要自定义控件,继承ImageView,重写onDraw函数。
最终效果:
具体步骤:
1. 先根据控件的短的一边为半径绘制一个圆形;
Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
int width = getWidth();
int height = getHeight();
int diameter = width < height ? width : height;
final Rect rectSrc = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
final Rect rectDst = new Rect(0, 0, width, height);
Bitmap bitmapRounded = Bitmap.createBitmap(getWidth(),
getHeight(), Config.ARGB_8888);
Canvas canvasRounded = new Canvas(bitmapRounded);
canvasRounded.drawCircle(width / 2, height / 2, diameter / 2, mPaint);
2. 将画笔的PorterDuffXfermode 模式设置为SRC_IN,为了让随后绘制的图形出现在刚才绘制的圆形内;
mPaint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvasRounded.drawBitmap(bitmap, rectSrc, rectDst, mPaint);
canvas.drawCircle(width / 2, height / 2, diameter / 2 - mBorderSize / 2, mPaintOfBorder);
注意这里的画笔mPaintOfBorder 需要设置为STROKE类型;
4. 这样一个圆形的图片就完成了,可以再增加一些接口设置圆形的颜色和宽度。
public void showBorder(int color) {
mShowBorder = true;
mBorderColor = color;
mPaintOfBorder.setColor(mBorderColor);
}
public void showBorder(int color, float size) {
mShowBorder = true;
mBorderColor = color;
mBorderSize = size;
mPaintOfBorder.setColor(mBorderColor);
mPaintOfBorder.setStrokeWidth(mBorderSize);
}
详细请见代码:
优快云:http://download.youkuaiyun.com/download/u013490924/10016022
或者