zoukankan      html  css  js  c++  java
  • Android实现圆形图片

     情景再现:

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

    实现:

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

  • 相关阅读:
    如何用C语言写一个基于服务器和客户端(TCP)
    如何把C++的源代码改写成C代码?
    可自定义的超链接控件
    一个XP风格的下拉分离按钮
    GroupControl
    带有工具提示和/或位图资源的按钮
    动态更改按钮图像
    一键启用/禁用一组控件
    粘性Snap-to-Center控制
    WinForm ImageButton
  • 原文地址:https://www.cnblogs.com/egojit/p/4055085.html
Copyright © 2011-2022 走看看