標籤:android blog ar 使用 java sp strong div on
情景再現:
寫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,就實現了圓形圖片效果。
Android實現圓形圖片