【问题标题】:Round top corners with Path带路径的圆顶角
【发布时间】:2013-03-18 05:14:02
【问题描述】:

我正在尝试在 java 中裁剪 Canvas 的左上角和右上角。我知道您可以只对所有角落使用addRoundRect,但我不确定只对顶部角落做什么。

这是我目前拥有的:

@Override
protected void onDraw(Canvas canvas) {
    float radius = 12f;
    Path clipPath = new Path();
    RectF rect = new RectF(0, 0, this.getWidth(), this.getHeight());
    //uh...
    //clipPath.addRoundRect(rect, radius, radius, Path.Direction.CW);

    canvas.clipPath(clipPath);
    super.onDraw(canvas);
}    

【问题讨论】:

标签: java android clipping


【解决方案1】:

你可以像这样使用另一个重载方法 addRoundRect() :

int width  = view.getWidth();
int height = view.getHeight();      
float[] radii = {0, 0, 0, 0, 0, 0, 0, 0};
if( mRadiusTop ) {
    radii[0] = mRadius;
    radii[1] = mRadius;
    radii[2] = mRadius;
    radii[3] = mRadius; 
}
if( mRadiusBottom ) {
    radii[4] = mRadius;
    radii[5] = mRadius;
    radii[6] = mRadius;
    radii[7] = mRadius;
}

clipPath.addRoundRect(new RectF(0, 0, width, height), radii, Path.Direction.CW);
canvas.clipPath(clipPath);

我通过上面的代码解决了这个问题。

【讨论】:

  • 你能分解半径吗?这8个值代表什么?
【解决方案2】:

你可以破解它。只需将 RectF 设置为与圆角半径一样多的像素,如下所示:

RectF rect = new RectF(0, 0, this.getWidth(), this.getHeight() + 12.0f); // draw a larger rect

我猜你必须将油漆颜色设置为完全透明 (0x00fffffff)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-27
    • 2013-11-23
    • 1970-01-01
    • 2011-06-13
    • 2023-01-12
    • 2019-04-22
    • 2014-12-28
    • 1970-01-01
    相关资源
    最近更新 更多