Android实现圆形图片

 情景再现:java

写Android程序也有一段时间了,今天忽然被问怎么实现一个圆形图片,不少app图像是圆形的。可是用户上传的图像可不是圆的,因此问题就来了,须要咱们代码实现圆形图片。可是大脑飞转想到第三方图片缓存工具ImageLoader。可是这个只能设置圆角,很难设置实现规则的圆形图片。而后又想只能经过paint和画布去画了,可是只能画一个圆,最后怎么让这个圆填充上图片就成问题了。最后没能回答他的问题。这个时候比较害羞,之前只用过圆角图片,没弄过这种圆形图片啊。因此晚上就查了下资料canvas

实现:缓存

/** 
         * 根据原图和变长绘制圆形图片 
         *  
         * @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,就实现了圆形图片效果。app

相关文章
相关标签/搜索