android - 如何从图像创建圆形剪辑路径?

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

假设我有一个矩形图像。我怎样才能创造出像下一个这样的风格?

enter image description here enter image description here

我的意思是,将图像裁剪成圆形,添加边框、阴影和粗/闪耀效果。到现在为止,我只尝试过这个 fragment 代码来裁剪图像:Cropping circular area from bitmap in Android但仅此而已。我不知道如何在 Android 中完成剩余的组件。

最佳答案

实现此效果的一种简单方法是使用 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.模式.SRC_IN).
  2. 如果您直接在屏幕上绘制效果,您可以简单地使用 Canvas.clipPath() 设置一个圆形剪辑。请注意,这仅适用于 Android 4.3 的硬件加速。

关于android - 如何从图像创建圆形剪辑路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18641362/

相关文章:

android - ScrollView 正在捕捉谷歌地图的触摸事件

java - 如何为布局的宽度和高度设置动画?

java - 如何更改 Android Canvas.drawTextOnPath() 的输出

Android:simple_list_item_single_choice 不适用于 ArrayAdapter

java - TabBar 应用程序中的 Android MapView -> NullPointerException

android - 找不到我的绑定(bind)的 inflate 方法(使用 Android,数据绑定(bind)。)

android - 更改背景后手指绘画变慢

java - 如何设置 Canvas 使用 @dimen 指定尺寸

Android home activity到不同系列的activity然后回到home activity?

android - 如何在生产中已经存在的应用程序中实现 Android TV 模块?