Понимание Android Canvas.saveLayer (…)

Я надеюсь, что методы saveLayer позволят мне рисовать на разных «слоях», а затем, когда рисунок будет закончен, объединить слои с холстом в любом порядке, который я выберу.

Очевидное вопрос в том, "почему бы вам просто не изменить операции рисования?" Ответ: я не могу:

У меня есть путь, который мне нужно нарисовать на холсте. В фоновом режиме / наименьшем z-индексе я хочу нарисовать контур замкнутым и с несколькими дополнительными точками, используя стиль заливки. Затем, вдобавок ко всему, Я хочу нарисовать контур только тех точек, которые изначально были в контуре.

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

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

int overlay = canvas.saveLayer(...);
// drawing operations for my uppermost layer
...

int background = canvas.saveLayer(...);
// drawing operations for my background layer
...

// merge the offscreen background bitmap with the canvas:
canvas.restoreToCount(background);

// merge the offscreen overlay bitmap with the canvas:
canvas.restoreToCount(overlay);

Когда код выполняется, порядок фона и наложения вообще не изменился; то, что отрисовывается первым, находится внизу, а то, что отрисовывается последним, - сверху. Еще более странным для меня является то, что я могу полностью закомментировать оба вызова restoreToCount (), и ничего не изменится. Согласно javadoc, ничто не должно отображаться на холсте до тех пор, пока не будет вызвана функция balancing restore ().

Очевидно, я совершенно не понимаю функции этого метода. Ник

10
задан Nick 25 February 2011 в 18:46
поделиться