微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Android中的矩形内剪切圆形路径

我已经阅读了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);
}

从onDraw方法删除路径剪辑代码,应该这样做.

编辑:

创建路径时,请确保仅在测量发生后执行此操作,例如:

@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 举报,一经查实,本站将立刻删除。

相关推荐