学员作品 学员心得 技术园地 潮人地 Android(安卓)培训 杭州电脑(计算机)培训 杭州网络营销培训 杭州JAVA培训
返回首页

安卓培训名博之Android中绘制圆形和圆角图片

时间:2014-10-14 00:12来源:cnds 作者:编程小笙 点击:
这里有一个非常关键的方法,是Paint类中的setXfermode(Xfermode xfermode)方法。关于此方法的使用和效果大家可以参见这篇博客:http://www.cnblogs.com/rayray/p/3670120.html 实际上就是用两张图片的叠加组合。在原来图片的基础上进行叠加一叠加一层自己绘

 

 

这里说到的圆角图片就是一个矩形,不过其边角不是直的线性结合,而是存在一定弧度的,例如下图的效果:


这里有一个非常关键的方法,是Paint类中的setXfermode(Xfermode xfermode)方法。关于此方法的使用和效果大家可以参见这篇博客:http://www.cnblogs.com/rayray/p/3670120.html

实际上就是用两张图片的叠加组合。在原来图片的基础上进行叠加一叠加一层自己绘制的一个圆角图片,再蒙上去。程序中我们是这样来使用的:paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));如果我们把Mode.SRC_IN换成是Mode.SCREEN,再结合上面给出的博客链接,大家就可以理解得很清晰了。

关于圆角的关键代码如下:

 

  1. public static Bitmap getFilletBitmap(Bitmap bitmap) {  
  2.         Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);  
  3.         Canvas canvas = new Canvas(output);  
  4.   
  5.         final int color = 0xffEEAD0E;  
  6.         final Paint paint = new Paint();  
  7.         final Rect rect = new Rect(00, bitmap.getWidth(), bitmap.getHeight());  
  8.         final RectF rectF = new RectF(rect);  
  9.         final float roundPx = 100;  
  10.         
  11.         paint.setAntiAlias(true);  
  12.         canvas.drawARGB(0000);  
  13.         paint.setColor(color);  
  14.         canvas.drawRoundRect(rectF, roundPx, roundPx, paint);  
  15.   
  16.         paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); // 这句是关键  
  17.         canvas.drawBitmap(bitmap, rect, rect, paint);  
  18.   
  19.         return output;  
  20.     }  

至于圆形的图片,是和这个是一样的。不过值得注意的是,这只是绘制圆角和圆形图片的某一种方式,还有就是可以去直接画一个圆角或圆形的View出来,这样会更加的炫。这个在以后的博客中也会提到,这里就不作过多讲解了。圆形图片的关键代码如下:

 

 

  1. public Bitmap getRoundBitmap(Bitmap bitmap) {  
  2.         int width = bitmap.getWidth();  
  3.         int height = bitmap.getHeight();  
  4.         float roundPx;  
  5.         float left, top, right, bottom, dst_left, dst_top, dst_right, dst_bottom;  
  6.         if (width <= height) {  
  7.             roundPx = width / 2;  
  8.   
  9.             left = 0;  
  10.             top = 0;  
  11.             right = width;  
  12.             bottom = width;  
  13.   
  14.             height = width;  
  15.   
  16.             dst_left = 0;  
  17.             dst_top = 0;  
  18.             dst_right = width;  
  19.             dst_bottom = width;  
  20.         } else {  
  21.             roundPx = height / 2;  
  22.   
  23.             float clip = (width - height) / 2;  
  24.   
  25.             left = clip;  
  26.             right = width - clip;  
  27.             top = 0;  
  28.             bottom = height;  
  29.             width = height;  
  30.   
  31.             dst_left = 0;  
  32.             dst_top = 0;  
  33.             dst_right = height;  
  34.             dst_bottom = height;  
  35.         }  
  36.   
  37.         Bitmap output = Bitmap.createBitmap(width, height, Config.ARGB_8888);  
  38.         Canvas canvas = new Canvas(output);  
  39.   
  40.         final Paint paint = new Paint();  
  41.         final Rect src = new Rect((int) left, (int) top, (int) right, (int) bottom);  
  42.         final Rect dst = new Rect((int) dst_left, (int) dst_top, (int) dst_right, (int) dst_bottom);  
  43.         final RectF rectF = new RectF(dst);  
  44.   
  45.         paint.setAntiAlias(true);// 设置画笔无锯齿  
  46.   
  47.         canvas.drawARGB(0000); // 填充整个Canvas  
  48.   
  49.         // 以下有两种方法画圆,drawRounRect和drawCircle  
  50.         canvas.drawRoundRect(rectF, roundPx, roundPx, paint);// 画圆角矩形,第一个参数为图形显示区域,第二个参数和第三个参数分别是水平圆角半径和垂直圆角半径。  
  51.         // canvas.drawCircle(roundPx, roundPx, roundPx, paint);  
  52.   
  53.         paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));// 设置两张图片相交时的模式,参考http://www.cnblogs.com/rayray/p/3670120.html  
  54.         canvas.drawBitmap(bitmap, src, dst, paint); // 以Mode.SRC_IN模式合并bitmap和已经draw了的Circle  
  55.   
  56.         return output;  
  57.     }  


工程代码下载:http://download.csdn.net/detail/u013761665/8027647

 

(责任编辑:杭州华育 ;杭州java培训,网络营销培训,杭州计算机培训,it培训,详询客服报名咨询
分享到:
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
提交报名信息

2017年杭州将加大力度经济转型,吸纳更多的技术人才落户杭州,软件人才需求量更是大幅提升,针对目前杭州IT行业人才需求“井喷”现象,华育软件杭州实训基地与杭州155家IT名企合作,建立人才培养与输送关系,启动“Eduask国家高端IT紧缺人才培养工程”。7月针对杭州地区18-28岁大中专生待业青年发放68个技能实训名额(应届大中专毕业生优先),经短期专业岗前实训后推荐进入企业,起薪4500-8000元,五险一金。

姓名: * 性别:
学历: 电话: *
所在地: *
您目前状况:
留言:
*