如何从图像创建圆形clippath?

时间:2013-09-05 16:20:31

标签: android android-layout android-canvas android-custom-view

想象一下,我有一个矩形图像。我怎么能创建像下一个样式的样式?

enter image description here enter image description here

我的意思是,将图像裁剪成圆圈,添加边框,阴影和粗糙/闪耀效果。到目前为止,我只尝试使用此代码段来裁剪图片:Cropping circular area from bitmap in Android但仅此而已。我不知道如何在Android中执行其余组件。

1 个答案:

答案 0 :(得分:16)

实现此效果的简便方法是使用Canvas.drawCircle()BitmapShader

BitmapShader s = new BitmapShader(myPhoto, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);

Paint p = new Paint();
p.setShader(s);

myCanvas.drawCircle(centerX, centerY, radius, p);

要执行阴影,只需在绘画上调用Paint.setShadowLayer()(这只有在您将效果绘制到屏幕外Bitmap或者View使用软件图层时才有效 - 设置通过致电View.setLayerType() - )。

可以使用Paint.Style.STROKE样式(可以通过调用Paint.setStyle()设置)在顶部绘制另一个圆圈来绘制边框。

最后,您可以通过在第一个圆圈的顶部画一个圆形,椭圆形或Path来绘制光泽。您需要在油漆上使用LinearGradient着色器,并且还需要剪切光泽。您可以通过两种方式执行此操作:

  1. 如果您要将整个效果绘制到Bitmap,这是我建议的,只需将绘画的Xfermode设置为new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)
  2. 如果您直接在屏幕上绘制效果,只需使用Canvas.clipPath()设置圆形剪辑即可。请注意,这仅适用于Android 4.3的硬件加速。