Я создаю приложение для рисования для Android. Расширение образца приложения FingerPaint, поставляемого с SDK. Однако, в отличие от FingerPaint, я использую SurfaceView с отдельным потоком рендеринга для рисования на поверхности. Все это очень стандартно и просто. Работает хорошо. Я хочу, однако, дать белый цвет фона для рисования поверхности, так что это похоже на рисование на белой бумаге. Фон по умолчанию черного цвета.
Поток моего представления поверхности вызывает метод представления onDraw ().
Проблема, с которой я здесь сталкиваюсь, заключается в том, что если я задаю цвет фона или ресурс фона для моего SurfaceView, этот фон перезаписывает предыдущий чертеж поверхности, когда представление отображается в следующий раз. Я объясню это на примере:
Предположим, я установил фон на белый цвет. Теперь приложение запускается, и мой SurfaceView имеет белый цвет. Хорошо, пока хорошо. Теперь я рисую красную линию на этой поверхности пальцем. Линия теперь показана на белой поверхности. Хорошо. Теперь это должно быть приложение для рисования, и предположим, что я хочу нарисовать машину. Итак, я рисую свою вторую красную линию пальцем. 2-я линия нарисована на экране, но 1-я, которую я нарисовал ранее, исчезает. То есть, поскольку я установил некоторый фон для моего SurfaceView, фон рисуется снова, перезаписывая первую нарисованную линию. Теперь на экране отображается только вторая линия.
Очевидно, я не хочу, чтобы это произошло. Код работает отлично, когда я не пытаюсь изменить фон (то есть обе строки показаны на черном фоне по умолчанию, эффективно без фона). Но когда я устанавливаю желаемый фон, это происходит. Есть ли способ как-то иметь статический фон, который не рисуется каждый раз? Я хочу, чтобы фон рисовался только один раз, все последующие рисунки должны происходить на этого фона. Я не хочу, чтобы среда выполнения Android рисовала фон, каждый раз, когда он рисует мой вид, перезаписывая, таким образом, весь чертеж, представленный в этом виде, из предыдущих визуализаций. Есть ли способ обойти это?
То, что я пытался достичь, это:
Установка цвета фона моего SurfaceView с использованием android: background в XML.
Делаем вышеизложенное, используя концепцию стиля. (указав значение стиля и сославшись на него в файле макета). Стиль просто определяет цвет фона как #FFFFFFFF (белый).
Установка стиля 2 для родительского представления SurfaceView (RelativeLayout).
Установка стиля 2 для всего приложения в качестве темы с использованием android: theme в моем файле манифеста.
Установка фона для рисования моего SurfaceView на изображение простого и белого цвета.
Вызов setBackgroundColor для моего SurfaceView из кода как this.setBackgroundColor (Color.WHITE).
Спасибо.