- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
在Android中画圆形图片的几种办法
在Android中画圆形图片的几种办法
2014-09-23 14:17 Sam blog.isming.me 字号: HYPERLINK javascript:setfont(12); \t _self T | HYPERLINK javascript:setfont(16); \t _self T
在开发中经常会有一些需求,比如显示头像,显示一些特殊的需求,将图片显示成圆角或者圆形或者其他的一些形状。但是往往我们手上的图片或者从服务器 获取到的图片都是方形的。这时候就需要我们自己进行处理,将图片处理成所需要的形状。正如茴香豆的的“茴”写法大于一种,经过我的研究,画出特殊图片的方 法也不是一种,我发现了三种,且听我一一道来。
AD: HYPERLINK /course/course_id-1189.html \t _blank 2014WOT全球软件技术峰会北京站 课程视频发布
HYPERLINK /2014shenzhen/ \t _blank 11月21日-22日 与WOT技术大会相约深圳 现在抢票
在开发中经常会有一些需求,比如显示头像,显示一些特殊的需求,将图片显示成圆角或者圆形或者其他的一些形状。但是往往我们手上的图片或者从服务器 获取到的图片都是方形的。这时候就需要我们自己进行处理,将图片处理成所需要的形状。正如茴香豆的的“茴”写法大于一种,经过我的研究,画出特殊图片的方 法也不是一种,我发现了三种,且听我一一道来。
使用Xfermode 两图相交方式
通过查找资料发现android中可以设置画笔的Xfermode即相交模式,从而设置两张图相交之后的显示方式,具体模式见下图,源码可以去android apidemo。(SRC 为我们要画到目标图上的图即原图,DST为目标图)
由上图可以看到,如果我们需要画一个圆形的图,可以在画布上面先画一个跟目标大小一样的圆,然后xfermode选择SRC_IN,再讲我们的头像 或者其他图画上去就可以了。同样也可以先画我们的图,再画圆,不过xfermode要选择DST_IN。两种都可以实现我们需要的效果。示例代码如下:
Paint?p?=?new?Paint();?
p.setAntiAlias(true);?//去锯齿?
p.setColor(Color.BLACK);?
p.setStyle(Paint.Style.STROKE);?
Canvas?canvas?=?new?Canvas(bitmap);?//bitmap就是我们原来的图,比如头像?
p.setXfermode(new?PorterDuffXfermode(Mode.DST_IN));?//因为我们先画了图所以DST_IN?
int?radius?=?bitmap.getWidth;?//假设图片是正方形的?
canvas.drawCircle(radius,?radius,?radius,?p);?//r=radius,?圆心(r,r)?
以上就是简单的示例,根据以上的16种模式你其实还可以做出更多效果。另外,只要你给一张相交图,那张图形状什么样,我们的图就可以显示成什么样。
通过裁剪画布区域实现指定形状的图形
Android中Canvas提供了ClipPath, ClipRect, ClipRegion 等方法来裁剪,通过Path, Rect ,Region 的不同组合,Android几乎可以支持任意形状的裁剪区域。因此,我们几乎可以获取任意形状的区域,然后在这个区域上画图,就可以获得,我们要的图片 了,直接看示例。
int?radius?=?src.getWidth()?/?2; //src为我们要画上去的图,跟上一个示例中的bitmap一样。?
Bitmap?dest?=?Bitmap.createBitmap(src.getWidth(),?src.getHeight(),?Bitmap.Config.ARGB_8888);?
Canvas?c?=?new?Canvas(dest);?
Paint?paint?=?new?Paint();?
paint.setColor(Color.BLACK);?
paint.setAntiAlias(true);?
Path?path?=?new?Path();?
path.addCircle(radius,?radius,?radius,?Path.Direction.CW);?
c.clipPath(path);?//裁剪区域?
c.drawBitmap(src,?0,?0,?paint);//把图画上去?
使用BitmapShader
直接先看示例
int?radius?=?src.getWidth()?/?2;?
B
文档评论(0)