删除android中rectange侧面的部分线条

删除android中rectange侧面的部分线条,android,canvas,android-drawable,Android,Canvas,Android Drawable,我想在Android中为视图绘制一个背景矩形。这是我的密码 rectBox= new RectF(0, 0, 200, 200); Paint paint= new Paint(); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(2); paint.setColor(Color.BLACK); canvas.drawRoundRect(rectBox, 0, 0, paint); 我正在得到输出 我想要这个输

我想在Android中为视图绘制一个背景矩形。这是我的密码

rectBox= new RectF(0, 0, 200,
        200);
Paint paint= new Paint();
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(2);
paint.setColor(Color.BLACK);
canvas.drawRoundRect(rectBox, 0, 0, paint);
我正在得到输出

我想要这个输出。我想删除矩形边上的部分线段

请给出一个想法如何做到这一点?

只需在这些线段上用背景色绘制线条(或矩形)

更新 使用
drawLine()
drawArc()

只需在这些线段上绘制背景色的线条(或矩形)

更新
使用
drawLine()
drawArc()

只绘制必要的零件。您可以在必要的位置绘制透明线

Paint paint = new Paint();
paint.setColor(Color.TRANSPARENT);
canvas.drawLine(0, 8, 0, 15, paint);
canvas.drawLine(8, 0, 15, 0, paint);
canvas.drawLine(8, 8, 8, 15, paint);
canvas.drawLine(15, 8, 15, 15, paint);

可以在必要的位置绘制透明线

Paint paint = new Paint();
paint.setColor(Color.TRANSPARENT);
canvas.drawLine(0, 8, 0, 15, paint);
canvas.drawLine(8, 0, 15, 0, paint);
canvas.drawLine(8, 8, 8, 15, paint);
canvas.drawLine(15, 8, 15, 15, paint);

我不确定是否会有转机,但这里是我在一个项目中所做的

public void draw(@NonNull Canvas canvas) {
    super.draw(canvas);

        // Full left band
        canvas.drawRect(0, 0, rect.left, getHeight(), rectPaint);

        // Full right band
        canvas.drawRect(rect.right, 0, getWidth(), getHeight(), rectPaint);

        // Partial top band
        canvas.drawRect(rect.left, 0, rect.right, rect.top, rectPaint);

        // Partial bottom band
        canvas.drawRect(rect.left, rect.bottom, rect.right, getHeight(), rectPaint);

        // Top lines
        canvas.drawRect(
                rect.left - strokeWidth, rect.top - strokeWidth,
                rect.left + cornerLength, rect.top,
                borderPaint
        );
        canvas.drawRect(
                rect.right - cornerLength, rect.top - strokeWidth,
                rect.right + strokeWidth, rect.top,
                borderPaint
        );

        // Bottom lines
        canvas.drawRect(
                rect.left - strokeWidth, rect.bottom,
                rect.left + cornerLength, rect.bottom + strokeWidth,
                borderPaint
        );
        canvas.drawRect(
                rect.right - cornerLength, rect.bottom,
                rect.right + strokeWidth, rect.bottom + strokeWidth,
                borderPaint
        );

        // Left lines
        canvas.drawRect(
                rect.left - strokeWidth, rect.top - strokeWidth,
                rect.left, rect.top + cornerLength,
                borderPaint
        );
        canvas.drawRect(
                rect.left - strokeWidth, rect.bottom - cornerLength,
                rect.left, rect.bottom + strokeWidth,
                borderPaint
        );

        // Right lines
        canvas.drawRect(
                rect.right, rect.top - strokeWidth,
                rect.right + strokeWidth, rect.top + cornerLength,
                borderPaint
        );
        canvas.drawRect(
                rect.right, rect.bottom - cornerLength,
                rect.right + strokeWidth, rect.bottom + strokeWidth,
                borderPaint
        );

}

我不确定是否会有转机,但这里是我在一个项目中所做的

public void draw(@NonNull Canvas canvas) {
    super.draw(canvas);

        // Full left band
        canvas.drawRect(0, 0, rect.left, getHeight(), rectPaint);

        // Full right band
        canvas.drawRect(rect.right, 0, getWidth(), getHeight(), rectPaint);

        // Partial top band
        canvas.drawRect(rect.left, 0, rect.right, rect.top, rectPaint);

        // Partial bottom band
        canvas.drawRect(rect.left, rect.bottom, rect.right, getHeight(), rectPaint);

        // Top lines
        canvas.drawRect(
                rect.left - strokeWidth, rect.top - strokeWidth,
                rect.left + cornerLength, rect.top,
                borderPaint
        );
        canvas.drawRect(
                rect.right - cornerLength, rect.top - strokeWidth,
                rect.right + strokeWidth, rect.top,
                borderPaint
        );

        // Bottom lines
        canvas.drawRect(
                rect.left - strokeWidth, rect.bottom,
                rect.left + cornerLength, rect.bottom + strokeWidth,
                borderPaint
        );
        canvas.drawRect(
                rect.right - cornerLength, rect.bottom,
                rect.right + strokeWidth, rect.bottom + strokeWidth,
                borderPaint
        );

        // Left lines
        canvas.drawRect(
                rect.left - strokeWidth, rect.top - strokeWidth,
                rect.left, rect.top + cornerLength,
                borderPaint
        );
        canvas.drawRect(
                rect.left - strokeWidth, rect.bottom - cornerLength,
                rect.left, rect.bottom + strokeWidth,
                borderPaint
        );

        // Right lines
        canvas.drawRect(
                rect.right, rect.top - strokeWidth,
                rect.right + strokeWidth, rect.top + cornerLength,
                borderPaint
        );
        canvas.drawRect(
                rect.right, rect.bottom - cornerLength,
                rect.right + strokeWidth, rect.bottom + strokeWidth,
                borderPaint
        );

}

我的背景颜色是动态的,所以我们不知道android中视图的颜色?我们有删除绘制线的选项吗?我的意思是只绘制“不透明”部分。我的背景颜色是动态的,所以我们不知道android中视图的颜色?我们可以选择删除绘制的线条吗?我的意思是只绘制“不透明”部分。不,我不想要白色,我想要删除线条的部分。我想要查看屏幕的背景色,但我的屏幕背景色是动态图像,我编辑了答案。您可以绘制透明线。尝试此操作后,矩形的颜色看起来是透明的。您可以尝试绘制多条带间隙的线段。和连接垂直线段的弧。我想这是我的最后一个选择,谢谢lotNo,我不想要白色,我想删除一条线的部分。我想看到屏幕的背景色,但我的屏幕背景色是动态图像,我编辑了答案。您可以绘制透明线。尝试此操作后,矩形的颜色看起来是透明的。您可以尝试绘制多条带间隙的线段。和连接垂直线段的弧。我想这是我最后的选择,非常感谢