我已经阅读了20多个问题/答案,但我仍然无法得到我想要的东西.我想在矩形内切一个圆圈,如下所示:
这是我的代码:
@Override
protected void onDraw(Canvas canvas) {
Paint paint = new Paint();
paint.setStyle(Paint.Style.FILL);
paint.setARGB(180, 0, 0, 0);
canvas.drawRect(0, 0, getWidth(), getHeight(), paint);
Path circularPath = new Path();
circularPath.addCircle(getWidth() / 2, getHeight() / 2, radius, Path.Direction.ccw);
canvas.clipPath(circularPath, Region.Op.REPLACE);
canvas.drawColor(0x00000000);
}
我的背景(setARGB)显示正确,但没有任何内容被剪裁.我还尝试了除REPLACE之外的其他Op值,强制软件光栅化(因为我读过一些Android版本的clipPath不支持某些Ops),通过调用setLayerType(LAYER_TYPE_SOFTWARE,null);在构造函数上,但无济于事.我如何达到预期的效果?
注意:我的最低SDK版本是15,因此我不需要支持低于4.0的任何内容.
解决方法:
尝试在dispatchDraw()中剪切路径:
@Override
protected void dispatchDraw(Canvas canvas)
{
canvas.clipPath(mClipPath, mRegion); // prevIoUsly created path & region
super.dispatchDraw(canvas);
}
编辑:
创建路径时,请确保仅在测量发生后执行此操作,例如:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
mClipPath.reset();
float radius = Math.min((float)getMeasuredWidth() / 2f, (float)getMeasuredHeight() / 2f) + 5;
mClipPath.addCircle((float)getMeasuredWidth() / 2f, (float)getMeasuredHeight() / 2f, radius, Path.Direction.ccw);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。