Мой холст не рисует все прямоугольники, которые я пытаюсь нарисовать - PullRequest
0 голосов
/ 04 августа 2020

Я проверял похожие вопросы здесь, но ответы уже делают то, что я делаю. Я пробовал большинство вещей, которые мог придумать, и просто не могу решить эту проблему.

Я создал свое собственное представление, в котором я рисую прямоугольники размером 100x100 рядом друг с другом. Первый прямоугольник нарисован правильно, но второй нарисован в цвете третьего прямоугольника, а третий прямоугольник вообще не нарисован. Я просто не могу понять, что я делаю не так.

private void init(@Nullable AttributeSet set){
        listRect = new ArrayList<>();
        listColor = new ArrayList<>();
        loadRect();
        invalidate();
    }

    private void loadRect(){
        Rect rect = new Rect();
        Paint paint = new Paint();

        paint.setColor(Color.GREEN);
        rect.set(0,0,100,100);
        listColor.add(paint);
        listRect.add(rect);


        rect = new Rect();
        paint = new Paint();
        paint.setColor(Color.BLUE);
        rect.set(100,0,100,100);
        listColor.add(paint);
        listRect.add(rect);

        rect = new Rect();
        paint = new Paint();
        paint.setColor(Color.RED);
        rect.set(200,0,100,100);
        listColor.add(paint);
        listRect.add(rect);
    }

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

        for(int i = 0; i < listRect.size(); i++){
            canvas.drawRect(listRect.get(i), listColor.get(i));
        }
    }

Вот изображение вида макета

1 Ответ

2 голосов
/ 04 августа 2020

Конструктор rect принимает 4 аргумента:

public Rect (int left, 
                int top, 
                int right, 
                int bottom)

То же самое для метода set :

public void set (int left, 
                int top, 
                int right, 
                int bottom)

Итак, ваш последний прямоугольник неверен (я имею в виду right):

rect.set(200,0,100,100);

Это должно быть:

rect.set(200,0,300,100);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...