Как наложить два прямоугольника рисования разными цветами - PullRequest
0 голосов
/ 04 марта 2019

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

        Paint myPaint = new Paint();
        myPaint.setStyle(Paint.Style.FILL);
        myPaint.setColor(getResources().getColor(R.color.colorGrey1));
        myPaint.setStrokeWidth(10);

        for (int pos = 0; pos < barCoordLeft.size(); pos ++) {

            c.drawRect(barCoordLeft.get(pos), barCoordTop.get(pos), barCoordRight.get(pos), barCoordBottom.get(pos), myPaint);
        }

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

        myPaint.setColor(getResources().getColor(R.color.colorGrey2));

        for (int pos = 0; pos < barCoordLeft.size(); pos ++) {

            c.drawRect(barCoordLeft.get(pos), barCoordTop.get(pos), barCoordRightSleep.get(pos), barCoordBottom.get(pos), myPaint);
        }

т.е. изменить цвет и использовать другой ArrayList для координат.

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

Я снимаю что-то вроде этого, как мнеподходить к нему?

overlay bar

PS> Причиной, по которой у меня есть цикл for, является диаграмма:

, поэтому вы думаете коддолжно работать то есть изменение цвета между ними?Просто кажется, что все это перерисовывается вторым цветом.Я знаю, что были некоторые ошибки с onDraw относительно.к этому.

for loop

2.PS> D'OH, я должен создать новый объект Paint, который был довольно очевиден, теперь этоработы:

        Paint myPaint2 = new Paint();
        myPaint2.setStyle(Paint.Style.FILL);
        myPaint2.setColor(getResources().getColor(R.color.colorGrey2));
        myPaint2.setStrokeWidth(10);

        for (int pos = 0; pos < barCoordLeft.size(); pos ++) {

            c.drawRect(barCoordLeft.get(pos), barCoordTop.get(pos), barCoordRightSleep.get(pos), barCoordBottom.get(pos), myPaint2);

with 2 objects

...