用户头像的圆形显示

【问题说明】:

在显示注册用户的头像的时候,如果是矩形的话会比较难看,一般处理成圆形,需要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);





posted on 2016-09-24 23:53  libuyi  阅读(327)  评论(0编辑  收藏  举报

导航