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

相關文章
相關標籤/搜索