1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > java圆形头像上传_Android自定义控件实例 圆形头像(图库 + 裁剪+设置) 上传头像

java圆形头像上传_Android自定义控件实例 圆形头像(图库 + 裁剪+设置) 上传头像

时间:2019-04-23 00:59:27

相关推荐

java圆形头像上传_Android自定义控件实例 圆形头像(图库 + 裁剪+设置) 上传头像

**

*圆形ImageView,可设置最多两个宽度不同且颜色不同的圆形边框。*设置颜色在xml布局文件中由自定义属性配置参数指定*/

public class RoundImageView extendsImageView {private int mBorderThickness = 0;privateContext mContext;private int defaultColor = 0xFFFFFFFF;//如果只有其中一个有值,则只画一个圆形边框

private int mBorderOutsideColor = 0;private int mBorderInsideColor = 0;//控件默认长、宽

private int defaultWidth = 0;private int defaultHeight = 0;//构造方法,参数上下文

publicRoundImageView(Context context) {super(context);

mContext=context;

}publicRoundImageView(Context context, AttributeSet attrs) {super(context, attrs);

mContext=context;

setCustomAttributes(attrs);

}public RoundImageView(Context context, AttributeSet attrs, intdefStyle) {super(context, attrs, defStyle);

mContext=context;

setCustomAttributes(attrs);

}private voidsetCustomAttributes(AttributeSet attrs) {

TypedArray a=mContext.obtainStyledAttributes(attrs, R.styleable.roundedimageview);

mBorderThickness= a.getDimensionPixelSize(R.styleable.roundedimageview_border_thickness, 0);

mBorderOutsideColor=a.getColor(R.styleable.roundedimageview_border_outside_color, defaultColor);

mBorderInsideColor=a.getColor(R.styleable.roundedimageview_border_inside_color, defaultColor);

}

@Overrideprotected voidonDraw(Canvas canvas) {

Drawable drawable=getDrawable();if (drawable == null) {return;

}if (getWidth() == 0 || getHeight() == 0) {return;

}this.measure(0, 0);if (drawable.getClass() == NinePatchDrawable.class)return;

Bitmap b=((BitmapDrawable) drawable).getBitmap();

Bitmap bitmap= b.copy(Bitmap.Config.ARGB_8888, true);if (defaultWidth == 0) {

defaultWidth=getWidth();

}if (defaultHeight == 0) {

defaultHeight=getHeight();

}int radius = 0;if (mBorderInsideColor != defaultColor && mBorderOutsideColor != defaultColor) {//定义画两个边框,分别为外圆边框和内圆边框

radius = (defaultWidth < defaultHeight ? defaultWidth : defaultHeight) / 2 - 2 *mBorderThickness;//画内圆

drawCircleBorder(canvas, radius + mBorderThickness / 2, mBorderInsideColor);//画外圆

drawCircleBorder(canvas, radius + mBorderThickness + mBorderThickness / 2, mBorderOutsideColor);

}else if (mBorderInsideColor != defaultColor && mBorderOutsideColor == defaultColor) {//定义画一个边框

radius = (defaultWidth < defaultHeight ? defaultWidth : defaultHeight) / 2 -mBorderThickness;

drawCircleBorder(canvas, radius+ mBorderThickness / 2, mBorderInsideColor);

}else if (mBorderInsideColor == defaultColor && mBorderOutsideColor != defaultColor) {//定义画一个边框

radius = (defaultWidth < defaultHeight ? defaultWidth : defaultHeight) / 2 -mBorderThickness;

drawCircleBorder(canvas, radius+ mBorderThickness / 2, mBorderOutsideColor);

}else {//没有边框

radius = (defaultWidth < defaultHeight ? defaultWidth : defaultHeight) / 2;

}

Bitmap roundBitmap=getCroppedRoundBitmap(bitmap, radius);

canvas.drawBitmap(roundBitmap, defaultWidth/ 2 - radius, defaultHeight / 2 - radius, null);

}/*** 获取裁剪后的圆形图片

*

*@param

*/

//radius半径

public Bitmap getCroppedRoundBitmap(Bitmap bmp, intradius) {

Bitmap scaledSrcBmp;int diameter = radius * 2;//为了防止宽高不相等,造成圆形图片变形,因此截取长方形中处于中间位置最大的正方形图片

int bmpWidth =bmp.getWidth();int bmpHeight =bmp.getHeight();int squareWidth = 0, squareHeight = 0;int x = 0, y = 0;

Bitmap squareBitmap;if (bmpHeight > bmpWidth) {//高大于宽

squareWidth = squareHeight =bmpWidth;

x= 0;

y= (bmpHeight - bmpWidth) / 2;//截取正方形图片

squareBitmap =Bitmap.createBitmap(bmp, x, y, squareWidth, squareHeight);

}else if (bmpHeight < bmpWidth) {//宽大于高

squareWidth = squareHeight =bmpHeight;

x= (bmpWidth - bmpHeight) / 2;

y= 0;

squareBitmap=Bitmap.createBitmap(bmp, x, y, squareWidth, squareHeight);

}else{

squareBitmap=bmp;

}if (squareBitmap.getWidth() != diameter || squareBitmap.getHeight() !=diameter) {

scaledSrcBmp= Bitmap.createScaledBitmap(squareBitmap, diameter, diameter, true);

}else{

scaledSrcBmp=squareBitmap;

}

Bitmap output=Bitmap.createBitmap(scaledSrcBmp.getWidth(),

scaledSrcBmp.getHeight(),

Bitmap.Config.ARGB_8888);

Canvas canvas= newCanvas(output);

Paint paint= newPaint();

Rect rect= new Rect(0, 0, scaledSrcBmp.getWidth(), scaledSrcBmp.getHeight());

paint.setAntiAlias(true);

paint.setFilterBitmap(true);

paint.setDither(true);

canvas.drawARGB(0, 0, 0, 0);

canvas.drawCircle(scaledSrcBmp.getWidth()/ 2,

scaledSrcBmp.getHeight()/ 2,

scaledSrcBmp.getWidth()/ 2,

paint);

paint.setXfermode(newPorterDuffXfermode(PorterDuff.Mode.SRC_IN));

canvas.drawBitmap(scaledSrcBmp, rect, rect, paint);

bmp= null;

squareBitmap= null;

scaledSrcBmp= null;returnoutput;

}/*** 边缘画圆*/

private void drawCircleBorder(Canvas canvas, int radius, intcolor) {

Paint paint= newPaint();/*去锯齿*/paint.setAntiAlias(true);

paint.setFilterBitmap(true);

paint.setDither(true);

paint.setColor(color);/*设置paint的style为STROKE:空心*/paint.setStyle(Paint.Style.STROKE);/*设置paint的外框宽度*/paint.setStrokeWidth(mBorderThickness);

canvas.drawCircle(defaultWidth/ 2, defaultHeight / 2, radius, paint);

}

}

java圆形头像上传_Android自定义控件实例 圆形头像(图库 + 裁剪+设置) 上传头像显示为圆形 附源码...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。