使用Picasso 来 实现 圆形头像
2016-11-19 09:39
525 查看
先看一下未处理的矩形头像,显得有些许生硬和不协调,再看看圆形的头像,是不是感觉美感倍增啊。
那么 怎样 才能实现各种各样的图片样式呢?对于此问题,我们的贴心小棉袄Picasso 为我们供了Transformation这个非常好用的接口。既然如此,我们想实现圆形头像就显得很容易了。
实现步骤:
1.自定义一个圆形头像类继承与Transformation 接口
2.写一个BitmapUtils工具类,让其实现两个方法:
①对bitmap进行压缩处理的方法
②将矩形的Bitmap对象转换为圆形的Bitmap的方法
原理图:
代码如下(功能性代码略微了解即可):
3.调用工具类中的方法:
完善自定义的CircleTransform类
4.调用transform方法,并把CircleTransform的对象传进去
最终效果:
那么 怎样 才能实现各种各样的图片样式呢?对于此问题,我们的贴心小棉袄Picasso 为我们供了Transformation这个非常好用的接口。既然如此,我们想实现圆形头像就显得很容易了。
实现步骤:
1.自定义一个圆形头像类继承与Transformation 接口
// 自定义一个圆形头像类继承与Transformation 接口 class CircleTransform implements Transformation{ /** * @param source :还未处理的矩形的Bitmap对象 * @return :返回的是处理后的圆形Bitmap对象 */ @Override public Bitmap transform(Bitmap source) { return null; } /** * 该方法没有什么实际意义,但是要保证其返回的值不能为null! * @return */ @Override public String key() { return ""; } }
2.写一个BitmapUtils工具类,让其实现两个方法:
①对bitmap进行压缩处理的方法
②将矩形的Bitmap对象转换为圆形的Bitmap的方法
原理图:
代码如下(功能性代码略微了解即可):
public class BitmapUtils { /**将矩形的Bitmap对象转换为圆形的Bitmap * @param source:待处理的 矩形的Bitmap * @return :需返回的圆形的Bitmap */ public static Bitmap circleBitmap(Bitmap source){ //获取Bitmap的宽度 int width = source.getWidth(); //返回一个正方形的Bitmap对象 Bitmap bitmap = Bitmap.createBitmap(width, width, Bitmap.Config.ARGB_8888); //提供指定宽高的canvas 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)); //前景:在画布上绘制一个bitmap canvas.drawBitmap(source, 0, 0, paint); return bitmap; } /**对bitmap进行压缩处理 * @param source :需要被处理的Bitmap * @param width 需要压缩成的宽度 必须为浮点型 * @param height 需要压缩成的高度 必须为浮点型 * @return 返回压缩后的Bitmap * 注意!必须提供参数2,3为浮点型。 */ public static Bitmap zoom(Bitmap source,float width,float height){ Matrix matrix = new Matrix(); float scaleX = width / source.getWidth(); float scaleY = height / source.getHeight(); matrix.postScale(scaleX, scaleY); Bitmap bitmap = Bitmap.createBitmap(source,0,0,source.getWidth(),source.getHeight(),matrix,true); return bitmap; } }
3.调用工具类中的方法:
完善自定义的CircleTransform类
class CircleTransform implements Transformation{ /** * @param source :还未处理的矩形的Bitmap对象 * @return :返回的是处理后的圆形Bitmap对象 */ @Override public Bitmap transform(Bitmap source) { //1.压缩处理 Bitmap zoomBitmp = BitmapUtils.zoom(source, JMUiUtils.dp2px(62), JMUiUtils.dp2px(62)); //2.圆形处理 Bitmap bitmap = BitmapUtils.circleBitmap(zoomBitmp); //必须要回收source,否则会报错 source.recycle(); return bitmap;//返回圆形的Bitmap对象 } /** * 该方法没有什么实际意义,但是要保证其返回的值不能为null! * @return */ @Override public String key() { return ""; } }
4.调用transform方法,并把CircleTransform的对象传进去
Picasso.with(getActivity()).load(user.UF_AVATAR_URL).transform(new CircleTransform()).into(imageView1);
最终效果:
相关文章推荐
- Android使用CircleImageView实现圆形头像的方法
- Picasso实现下载圆形头像以及圆角图片
- 使用CSS实现圆形头像的设计
- Picasso实现下载圆形头像以及圆角图片
- Android使用 CircleImageView 实现圆形头像的方法
- Android实现圆形头像-使用自定义控件
- 学习笔记之——Android中的Picasso实现圆形头像、圆角图片工具类
- iOS 圆形头像如何实现
- 在 Android 的 IM 应用中使用 asmack 库实现用户头像的传输(基于VCard协议)
- 实现圆形头像
- 重写ImageView使用Xfermode遮罩实现圆角和圆形
- iOS实现头像选取(照相或者图片库)、大小等比缩放、生成圆形头像
- Android 自定义View修炼-Android实现圆形、圆角和椭圆自定义图片View(使用BitmapShader图形渲染方法)
- 使用Flash结合PHP实现头像的无刷新上传与裁剪
- iOS实现圆形头像
- Android 如何实现圆形头像
- Android 自定义View修炼-实现自定义圆形、圆角和椭圆ImageView(使用Xfermode图形渲染方法)
- IOS之圆形头像的实现
- 简单测试实现 博客园的头像上传功能 使用插件jquery jcrop+fineupload
- iOS 圆形头像如何实现