【问题说明】:
在显示注册用户的头像的时候,如果是矩形的话会比较难看,一般处理成圆形,需要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);
时间: 2024-10-13 22:21:33