欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  技术分享

Android ImageView裁剪图片为圆形头像例子

程序员文章站 2022-03-01 14:49:08
...

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

Android ImageView裁剪图片为圆形头像例子


初始化自定义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