壮心未与年俱老,死去犹能作鬼雄。这篇文章主要讲述在android中画圆形图片的几种办法相关的知识,希望能为你提供帮助。
在开发中常常会有一些需求,比方显示头像,显示一些特殊的需求,将图片显示成圆角或者圆形或者其它的一些形状。
可是往往我们手上的图片或者从server获取到的图片都是方形的。这时候就须要我们自己进行处理,将图片处理成所须要的形状。正如茴香豆的的“茴”写法大于一种。经过我的研究。画出特殊图片的方法也不是一种,我发现了三种。且听我一一道来。
使用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一样。
【在android中画圆形图片的几种办法】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;
BitmapShader bitmapShader = new BitmapShader(src, Shader.TileMode.REPEAT,
Shader.TileMode.REPEAT);
Bitmap dest = Bitmap.createBitmap(src.getWidth(), src.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(dest);
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setShader(bitmapShader);
c.drawCircle(radius,radius, radius, paint);
Shader就是画笔的渲染器,本质上这中方法事实上是画圆,可是渲染採用了我们的图片,然后就能够获得指定的形状了。可是我认为。这个不适合画非常复杂的图形,可是在内存消耗上,应该比第一种小非常多。同一时候呢,设置Shader.TileMode.MIRROR,还能够实现镜面效果,也是极好的。
上面就是实现的三种方法,三种方法都能够画许多的形状,当然遇到很很很很复杂的情况,我是建议使用第一种。这时候能够让美工给一张末班形状图。省自己去代码绘制了。
大家依据自己的需求选择。
在github上面CustomShapeImageView就是用了我们所说的第一种方法绘制。RoundedImageView 和CircleImageView则使用bitmapshader完毕,当然可能另一些其它的控件,或许还有其它的一些实现方法,假设你知道。能够回复告诉我^_^。
原文地址:http://blog.isming.me/2014/09/19/draw-circle-image-in-android/,转载请注明出处。
推荐阅读
- 获取指定类上的@RequestMapping注解的请求信息
- Android 勤用RXJava compose操作符消除重复代码
- Android使用token维持登陆状态的方法
- Qt For Android 开发环境配置
- Android开发-新建线程崩溃
- office2007默认保存文件格式的更改办法_其它办公
- excel拆分单元格图文步骤_Excel专区
- office word 2007文档加密的图文步骤_其它办公
- 每次打开office2007都提示安装设置的处理办法_其它办公