Android实现圆形图片
情景再现:
写Android程序也有一段时间了,今天突然被问怎么实现一个圆形图片,很多app图像是圆形的。但是用户上传的图像可不是圆的,所以问题就来了,需要我们代码实现圆形图片。但是大脑飞转想到第三方图片缓存工具ImageLoader。但是这个只能设置圆角,很难设置实现规则的圆形图片。然后又想只能通过paint和画布去画了,但是只能画一个圆,最后怎么让这个圆填充上图片就成问题了。最后没能回答他的问题。这个时候比较害羞,以前只用过圆角图片,没弄过这种圆形图片啊。所以晚上就查了下资料
实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | /** * 根据原图和变长绘制圆形图片 * * @param source * @param min * @return */ private Bitmap createCircleImage(Bitmap source, int min) { final Paint paint = new Paint(); paint.setAntiAlias( true ); Bitmap target = Bitmap.createBitmap(min, min, Config.ARGB_8888); /** * 产生一个同样大小的画布 */ Canvas canvas = new Canvas(target); /** * 首先绘制圆形 */ canvas.drawCircle(min / 2 , min / 2 , min / 2 , paint); /** * 使用SRC_IN */ paint.setXfermode( new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); /** * 绘制图片 */ canvas.drawBitmap(source, 0 , 0 , paint); return target; } |
其实主要靠:paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));这行代码,为什么呢,我给大家解释下,SRC_IN这种模式,两个绘制的效果叠加后取交集展现后图,也就是先用paint在画布中画一个圆,然后再用图像去和这个圆叠加。交集后得到一个圆,并且用图片填充这个圆。怎么说呢,咱们第一个绘制的是个圆形,第二个绘制的是个Bitmap,于是交集为圆形,展现的是BItmap,就实现了圆形图片效果。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步