圆形ImageView——头像显示
来源:互联网 发布:淘宝便宜有趣的小玩意 编辑:程序博客网 时间:2024/06/07 09:05
关于这个功能已经很多人总结过了,但又有或多或少得小问题
这已经是很简介的代码了,但问题是非正方形图片会明显压缩变形。
public Bitmap toRoundBitmap(Bitmap bitmap) { //圆形图片宽高 int width = bitmap.getWidth(); int height = bitmap.getHeight(); //正方形的边长 int r = 0; //取最短边做边长 if(width > height) { r = height; } else { r = width; } //构建一个bitmap Bitmap backgroundBmp = Bitmap.createBitmap(width, height, Config.ARGB_8888); //new一个Canvas,在backgroundBmp上画图 Canvas canvas = new Canvas(backgroundBmp); Paint paint = new Paint(); //设置边缘光滑,去掉锯齿 paint.setAntiAlias(true); //宽高相等,即正方形 RectF rect = new RectF(0, 0, r, r); //通过制定的rect画一个圆角矩形,当圆角X轴方向的半径等于Y轴方向的半径时, //且都等于r/2时,画出来的圆角矩形就是圆形 canvas.drawRoundRect(rect, r/2, r/2, paint); //设置当两个图形相交时的模式,SRC_IN为取SRC图形相交的部分,多余的将被去掉 paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); //canvas将bitmap画在backgroundBmp上 canvas.drawBitmap(bitmap, null, rect, paint); //返回已经绘画好的backgroundBmp return backgroundBmp; }
原文已经讲述的很详细了,多余不再赘述。
原文链接:http://blog.csdn.net/feixiangdexin123087/article/details/42076987
为了优化达到下图效果
在上述代码中加入Bitmap剪切出正方形的功能:
int r = width > height ? height : width;// 裁切后所取的正方形区域边长; int retX = width > height ? (width - height) / 2 : 0;//基于原图,取正方形左上角x坐标 int retY = width > height ? 0 : (height - width) / 2; bitmap = Bitmap.createBitmap(bitmap, retX, retY, r, r, null, false);
最终代码如下:
public Bitmap toRoundBitmap(Bitmap bitmap) { //圆形图片宽高 int width = bitmap.getWidth(); int height = bitmap.getHeight(); //正方形的边长 int r = width > height ? height : width;// 裁切后所取的正方形区域边长; int retX = width > height ? (width - height) / 2 : 0;//基于原图,取正方形左上角x坐标 int retY = width > height ? 0 : (height - width) / 2; bitmap = Bitmap.createBitmap(bitmap, retX, retY, r, r, null, false); //构建一个bitmap Bitmap backgroundBmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); //new一个Canvas,在backgroundBmp上画图 Canvas canvas = new Canvas(backgroundBmp); Paint paint = new Paint(); //设置边缘光滑,去掉锯齿 paint.setAntiAlias(true); //宽高相等,即正方形 RectF rect = new RectF(0, 0, r, r); //通过制定的rect画一个圆角矩形,当圆角X轴方向的半径等于Y轴方向的半径时, //且都等于r/2时,画出来的圆角矩形就是圆形 canvas.drawRoundRect(rect, r/2, r/2, paint); //设置当两个图形相交时的模式,SRC_IN为取SRC图形相交的部分,多余的将被去掉 paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); //canvas将bitmap画在backgroundBmp上 canvas.drawBitmap(bitmap, null, rect, paint); //返回已经绘画好的backgroundBmp return backgroundBmp; }
原文链接:http://www.cnblogs.com/Jessy/archive/2012/02/03/2336787.html
0 0
- 圆形ImageView——头像显示
- 圆形的imageview,常用来显示头像
- imageView创建圆形头像
- Android头像ImageView圆形
- android 圆形头像的Imageview
- Android ImageView实现圆形头像
- 自定义ImageView实现圆形头像
- 自定义ImageView实现圆形头像
- android 圆形头像 自定义ImageView
- Android 圆形头像显示
- WPF圆形头像显示
- 圆形头像显示实现
- iOS开发——头像设置及本地沙盒保存,圆形头像显示
- 圆形头像设置—CustomShapeImageView
- imageview显示圆形图片
- ImageView图片圆形显示
- Android ImageView圆形头像 图片完全解析
- 圆角、圆形ImageView(头像需求)
- github 原版RGBDSLAMV2上手详细攻略(科普ros方面)
- Linux学习(信号量)
- [c#]记一次实验室局域网的ARP欺骗
- 采用GAUSS列主消元法求解线性方程组(MATLAB)
- Tiny210(S5PV210) U-BOOT(三)----配置时钟频率源码分析
- 圆形ImageView——头像显示
- MyBatis-----3、MyBatis分页插件PageHelper
- Ubuntu 安装Srilm
- JDK源码分析(2)-java.util.LinkedList
- Tiny210(S5PV210) U-BOOT(四)----Nand Flash原理(1)
- The Python Challenge 题解
- hbase的admin可用api汇总
- RecycleView的layoutManager.setStackFromEnd(true);layoutManager.setReverseLayout(true);
- 204. Count Primes