如何突出显示 canvas 上的特定矩形

How to highlight specific rectangles on canvas

根据我用于我的 canvas 绘图的代码和相关的屏幕截图,我试图填充一个特定的红色矩形,但它不起作用。可以做些什么来确保只有顶行左数第二个矩形被填充?

public class Car extends View {
    public Car(Context context) {
        super(context);
        init();
    }

    public Car(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public Car(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    Paint paint;

    private void init() {
        paint = new Paint();
        paint.setColor(Color.RED);
        paint.setStrokeWidth(4);
//        paint.setStyle(Paint.Style.STROKE); // delete line for filled rect
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        int w = canvas.getWidth();
        int h = canvas.getHeight();

        int rectWidth = w / 5;
        int space = w / 15;
        int topRectHeight = getPaddingTop();
        int bottomRectHeight = getPaddingBottom();

        for (int i = 0; i < 4; i++) {
            int left = i * (rectWidth + space);
            int right = left + rectWidth;

            if (i == 2){
                paint.setStyle(Paint.Style.STROKE); // delete line for filled rect
            }

            Rect rect = new Rect(left, 0, right, topRectHeight);
            canvas.drawRect(rect, paint);

            Rect rect2 = new Rect(left, h - bottomRectHeight, right, h);
            canvas.drawRect(rect2, paint);
        }
    }
}

这样只会填充指定的矩形(只填充顶部的第二个)。

 paint.setStyle(Paint.Style.STROKE); //add this     
      for (int i = 0; i < 4; i++) {
                    int left = i * (rectWidth + space);
                    int right = left + rectWidth;

                    if (i == 1){
                        paint.setStyle(Paint.Style.FILL); // change to this
                    }

                    Rect rect = new Rect(left, 0, right, topRectHeight);
                    canvas.drawRect(rect, paint);
                    paint.setStyle(Paint.Style.STROKE);//add this
                    Rect rect2 = new Rect(left, h - bottomRectHeight, right, h);
                    canvas.drawRect(rect2, paint);
                }

如果您只想填充第二个底部:

 paint.setStyle(Paint.Style.STROKE); //you can remove this now    
      for (int i = 0; i < 4; i++) {
                    paint.setStyle(Paint.Style.STROKE);//add this
                    int left = i * (rectWidth + space);
                    int right = left + rectWidth;           
                    Rect rect = new Rect(left, 0, right, topRectHeight);
                    canvas.drawRect(rect, paint);

                    if (i == 1){
                        paint.setStyle(Paint.Style.FILL); // change to this
                    }
                    Rect rect2 = new Rect(left, h - bottomRectHeight, right, h);
                    canvas.drawRect(rect2, paint);
                }

如果您想要第二个顶部和底部都填充:

paint.setStyle(Paint.Style.STROKE); //you can remove this now    
      for (int i = 0; i < 4; i++) {
                    paint.setStyle(Paint.Style.STROKE);//add this
                    int left = i * (rectWidth + space);
                    int right = left + rectWidth;          
                    if (i == 1){
                        paint.setStyle(Paint.Style.FILL); // change to this
                    }

                    Rect rect = new Rect(left, 0, right, topRectHeight);
                    canvas.drawRect(rect, paint);
                    Rect rect2 = new Rect(left, h - bottomRectHeight, right, h);
                    canvas.drawRect(rect2, paint);
                }