用户头像的圆形显示
Posted libuyi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用户头像的圆形显示相关的知识,希望对你有一定的参考价值。
【问题说明】:
在显示注册用户的头像的时候,如果是矩形的话会比较难看,一般处理成圆形,需要2步:
step1:将图片按照matrix进行压缩成正方形;
step2:将正方形图片转为圆形图片
【工具类】:
下面提供2个方法:
public class BitmapUtils {
//图片的压缩,将图片source压缩成宽为w,高为h的图片
public static Bitmap zoom(Bitmap source,float w ,float h){//参数2,3:必须不能声明int
Matrix matrix = new Matrix();//导包不要导错
matrix.postScale(w / source.getWidth(),h / source.getHeight());
Bitmap bitmap = Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), matrix, true);
return bitmap;
}
//将一张图片转为圆形头像
public static Bitmap circleBitmap(Bitmap source) {
//获取图片的宽度
int width = source.getWidth();
//创建一个与source等宽的Bitmap对象
Bitmap bitmap = Bitmap.createBitmap(width, width, Bitmap.Config.ARGB_8888);
//创建等大小的画布
Canvas canvas = new Canvas(bitmap);
//绘制一个圆圈:将此圆圈理解为下层图片
Paint paint = new Paint();
paint.setAntiAlias(true);
canvas.drawCircle(width / 2, width / 2, width / 2, paint);
//设置图片相交情况下的处理方式
//setXfermode:设置当绘制的图像出现相交情况时候的处理方式的,它包含的常用模式有哪几种
//PorterDuff.Mode.SRC_IN 取两层图像交集部门,只显示上层图像,注意这里是指取相交叉的部分,然后显示上层图像
//PorterDuff.Mode.DST_IN 取两层图像交集部门,只显示下层图像
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
//source:理解为上层图片
canvas.drawBitmap(source, 0, 0, paint);
return bitmap;
}
}
【效果图】:
【使用工具类加载头像的代码】:
//读取本地保存用户信息的文件为一个User对象
User user = ((BaseActivity) getActivity()).readLogin();
//设置用户名
textView11.setText(user.UF_ACC);
//加载头像
Picasso
.with(getActivity())
.load(user.UF_AVATAR_URL)
.transform(new Transformation() {
@Override
public Bitmap transform(Bitmap source) {
//对图片进行压缩处理
Bitmap zoom = BitmapUtils.zoom(source, DensityUtil.dip2px(AppNetConfig.HEAD_WITH), DensityUtil.dip2px(AppNetConfig.HEAD_WITH));
//对图片进行圆形处理
Bitmap circleBitmap = BitmapUtils.circleBitmap(zoom);
//回收Bitmap,否则报错
source.recycle();
return circleBitmap;
}
@Override
public String key() {
return "";//此方法不能返回null.否则报异常
}
})
.into(imageView1);
以上是关于用户头像的圆形显示的主要内容,如果未能解决你的问题,请参考以下文章
Android自定义控件实例,圆形头像(图库 + 裁剪+设置),上传头像显示为圆形,附源码