canvas.drawRect如何绘制矩形

1 android canvas android-custom-view android-view

我必须创建一个自定义视图,我必须绘制一个矩形.我正在尝试使用该canvas.drawRect方法.我想像这样创建一些矩形 在此输入图像描述

灰色的是我的自定义视图,它扩展了View类.在onDraw方法内部我试图绘制矩形.

但实际上我对drawRect方法的参数感到困惑.

根据文档

/**
 * Draw the specified Rect using the specified paint. The rectangle will
 * be filled or framed based on the Style in the paint.
 *
 * @param left   The left side of the rectangle to be drawn
 * @param top    The top side of the rectangle to be drawn
 * @param right  The right side of the rectangle to be drawn
 * @param bottom The bottom side of the rectangle to be drawn
 * @param paint  The paint used to draw the rect
 */
Run Code Online (Sandbox Code Playgroud)

我假设左边和顶部形成起点的x,y坐标,右边是宽度,底部是高度.但它似乎没有这样的方式.

我尝试过这样的东西来绘制一个矩形,但它没有绘制任何东西

       paint.setColor(Color.BLUE);
       canvas.drawRect(5, canvas.getHeight()/2, 30, 30, paint );
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我们如何使用这些值绘制一个矩形?

如果有人能够显示至少绘制第一个矩形的代码,那将非常有用.

我的要求是,内部矩形的数量是动态的,所以如果我将4个传递给这个视图,它应该水平创建4个相等宽度的矩形.就像是 在此输入图像描述

提前致谢!!

Sar*_* Kn 10

但实际上我对drawRect方法的参数感到困惑.

drawRect方法只需要两个坐标来绘制矩形.左上角和右下角.因此,4个点在画布中形成这两个坐标.希望从下面的图像中可以清楚地看到

在此输入图像描述

P1和P2是由(左,上)和(右,下)形成的点,因此绘制的矩形将是这样的.

在此输入图像描述

要像在图像中显示的那样动态绘制矩形,请尝试这样的操作

int[] colors = new int[]{Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW}; // given some fixed colors
Run Code Online (Sandbox Code Playgroud)

在你的onDraw方法

@Override
    protected void onDraw(Canvas canvas) {
    int padding = 5;
    float rectangleWidth = (getMeasuredWidth() - padding * 2) / colors.length;
    for (int i = 0; i < colors.length; i++) {
        paint.setColor(colors[i]);
        canvas.drawRect(padding + (rectangleWidth * i), getMeasuredHeight() / 2, padding + rectangleWidth * (i + 1), getMeasuredHeight() - padding, paint); // 5 px is the padding given to the canvas
    }
  }
Run Code Online (Sandbox Code Playgroud)