自定义圆形 ImageView

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);	 


3. 得到圆形图形后,我们还可以给它绘制一个边;
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);
	}

详细请见代码:

CSDN:http://download.csdn.net/download/u013490924/10016022

或者

GitHub:  https://github.com/droidzxy/RoundImageView

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值