Android ImageView裁剪图片为圆形头像例子
2014-12-12 13:21:25  By: dwtedx

本文讲述的是Android实现圆形头像功能、可选择任意图片、相信这种功能大家在很多地方都看到过、比如新版本QQ(QQ5.0之后的版本)、都采用了圆形头像、那么到底该用什么方法来实现这个效果呢、本文采用的方法是继承至ImageView、通过Bitmap的来实现的、运行效果如下

Android圆形头像


初始化自定义View

public CircleImageView(Context context, AttributeSet attrs, 
		int defStyle) {
	super(context, attrs, defStyle);
	super.setScaleType(SCALE_TYPE);

	TypedArray a = context.obtainStyledAttributes(attrs, 
		R.styleable.CircleImageView, defStyle, 0);

	mBorderWidth = a.getDimensionPixelSize(R.styleable.
		CircleImageView_border_width, DEFAULT_BORDER_WIDTH);
	mBorderColor = a.getColor(R.styleable.
		CircleImageView_border_color, DEFAULT_BORDER_COLOR);

	a.recycle();
	mReady = true;
	if (mSetupPending) {
		setup();
		mSetupPending = false;
	}
}


计算宽度

@Override
protected void onDraw(Canvas canvas) {
	if (getDrawable() == null) {
		return;
	}

	canvas.drawCircle(getWidth() / 2, 
		getHeight() / 2, mDrawableRadius, mBitmapPaint);
	canvas.drawCircle(getWidth() / 2, 
		getHeight() / 2, mBorderRadius, mBorderPaint);
}


设置BorderWidth

public void setBorderWidth(int borderWidth) {
	if (borderWidth == mBorderWidth) {
		return;
	}

	mBorderWidth = borderWidth;
	setup();
}


获取Bitmap

private Bitmap getBitmapFromDrawable(Drawable drawable) {
	if (drawable == null) {
		return null;
	}

	if (drawable instanceof BitmapDrawable) {
		return ((BitmapDrawable) drawable).getBitmap();
	}

	try {
		Bitmap bitmap;

		if (drawable instanceof ColorDrawable) {
			bitmap = Bitmap.createBitmap(COLORDRAWABLE_DIMENSION, 
				COLORDRAWABLE_DIMENSION, BITMAP_CONFIG);
		} else {
			bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), 
				drawable.getIntrinsicHeight(), BITMAP_CONFIG);
		}

		Canvas canvas = new Canvas(bitmap);
		drawable.setBounds(0, 0, canvas.getWidth(), 
			canvas.getHeight());
		drawable.draw(canvas);
		return bitmap;
	} catch (OutOfMemoryError e) {
		return null;
	}
}


自定义View写好之后、在Activity里面调用就可以了、最后给大家贴上源代码

源代码下载链接: http://dwtedx.com/download.html?bdkey=s/1c0iwaWw 密码: iuqt

若资源对你有帮助、浏览后有很大收获、不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力

想获取DD博客最新代码、你可以扫描下方的二维码、关注DD博客微信公众号(ddblogs)

或者你也可以关注我的新浪微博、了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)

如对资源有任何疑问或觉得仍然有很大的改善空间、可以对该博文进行评论、希望不吝赐教

为保证及时回复、可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)

感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛


快速评论


技术评论

  • 该技术还没有评论、赶快抢沙发吧...
DD记账
top
+