Android中绘制圆形和圆角图片
生活随笔
收集整理的這篇文章主要介紹了
Android中绘制圆形和圆角图片
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
這里說到的圓角圖片就是一個(gè)矩形,不過其邊角不是直的線性結(jié)合,而是存在一定弧度的,例如下圖的效果:
這里有一個(gè)非常關(guān)鍵的方法,是Paint類中的setXfermode(Xfermode xfermode)方法。關(guān)于此方法的使用和效果大家可以參見這篇博客:http://www.cnblogs.com/rayray/p/3670120.html
實(shí)際上就是用兩張圖片的疊加組合。在原來圖片的基礎(chǔ)上進(jìn)行疊加一疊加一層自己繪制的一個(gè)圓角圖片,再蒙上去。程序中我們是這樣來使用的:paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));如果我們把Mode.SRC_IN換成是Mode.SCREEN,再結(jié)合上面給出的博客鏈接,大家就可以理解得很清晰了。
關(guān)于圓角的關(guān)鍵代碼如下:
public static Bitmap getFilletBitmap(Bitmap bitmap) {Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);Canvas canvas = new Canvas(output);final int color = 0xffEEAD0E;final Paint paint = new Paint();final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());final RectF rectF = new RectF(rect);final float roundPx = 100;paint.setAntiAlias(true);canvas.drawARGB(0, 0, 0, 0);paint.setColor(color);canvas.drawRoundRect(rectF, roundPx, roundPx, paint);paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); // 這句是關(guān)鍵canvas.drawBitmap(bitmap, rect, rect, paint);return output;}至于圓形的圖片,是和這個(gè)是一樣的。不過值得注意的是,這只是繪制圓角和圓形圖片的某一種方式,還有就是可以去直接畫一個(gè)圓角或圓形的View出來,這樣會(huì)更加的炫。這個(gè)在以后的博客中也會(huì)提到,這里就不作過多講解了。圓形圖片的關(guān)鍵代碼如下:
public Bitmap getRoundBitmap(Bitmap bitmap) {int width = bitmap.getWidth();int height = bitmap.getHeight();float roundPx;float left, top, right, bottom, dst_left, dst_top, dst_right, dst_bottom;if (width <= height) {roundPx = width / 2;left = 0;top = 0;right = width;bottom = width;height = width;dst_left = 0;dst_top = 0;dst_right = width;dst_bottom = width;} else {roundPx = height / 2;float clip = (width - height) / 2;left = clip;right = width - clip;top = 0;bottom = height;width = height;dst_left = 0;dst_top = 0;dst_right = height;dst_bottom = height;}Bitmap output = Bitmap.createBitmap(width, height, Config.ARGB_8888);Canvas canvas = new Canvas(output);final Paint paint = new Paint();final Rect src = new Rect((int) left, (int) top, (int) right, (int) bottom);final Rect dst = new Rect((int) dst_left, (int) dst_top, (int) dst_right, (int) dst_bottom);final RectF rectF = new RectF(dst);paint.setAntiAlias(true);// 設(shè)置畫筆無鋸齒canvas.drawARGB(0, 0, 0, 0); // 填充整個(gè)Canvas// 以下有兩種方法畫圓,drawRounRect和drawCirclecanvas.drawRoundRect(rectF, roundPx, roundPx, paint);// 畫圓角矩形,第一個(gè)參數(shù)為圖形顯示區(qū)域,第二個(gè)參數(shù)和第三個(gè)參數(shù)分別是水平圓角半徑和垂直圓角半徑。// canvas.drawCircle(roundPx, roundPx, roundPx, paint);paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));// 設(shè)置兩張圖片相交時(shí)的模式,參考http://www.cnblogs.com/rayray/p/3670120.htmlcanvas.drawBitmap(bitmap, src, dst, paint); // 以Mode.SRC_IN模式合并bitmap和已經(jīng)draw了的Circlereturn output;}
工程代碼下載: http://download.csdn.net/detail/u013761665/8027647
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀
總結(jié)
以上是生活随笔為你收集整理的Android中绘制圆形和圆角图片的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android高仿IOS和QQ的弹出对话
- 下一篇: Android中利用服务来守护进程