Установка цвета фона для SurfaceView в Android

Я создаю приложение для рисования для Android. Расширение образца приложения FingerPaint, поставляемого с SDK. Однако, в отличие от FingerPaint, я использую SurfaceView с отдельным потоком рендеринга для рисования на поверхности. Все это очень стандартно и просто. Работает хорошо. Я хочу, однако, придать поверхности рисования белый фон, чтобы это было похоже на рисование на белой бумаге. Фон по умолчанию черный. Поток моего представления поверхности вызывает метод представления onDraw ().

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

Предположим, я установил белый цвет для фона. Теперь приложение запускается, и мой SurfaceView имеет белый цвет. Хорошо, пока все хорошо. Теперь я провожу пальцем красную линию на этой поверхности. Линия теперь отображается на белой поверхности. Хороший. Предполагается, что это приложение для рисования, и предположим, я хочу нарисовать машину. Итак, я рисую пальцем вторую красную линию. Вторая линия нарисована на экране, а первая, которую я нарисовал ранее, исчезает. То есть, поскольку я установил некоторый фон для своего SurfaceView, фон отрисовывается снова, тем самым перезаписывая первую нарисованную строку. Теперь на экране отображается только вторая нарисованная линия.

Очевидно, я не хочу, чтобы это произошло.Код работает отлично, когда я не пытаюсь изменить фон (то есть отображаются обе строки, на черном фоне по умолчанию, без фона фактически). Но когда я устанавливаю какой-то желаемый фон, это происходит. Есть ли способ каким-то образом создать статический фон, который не рисуется каждый раз? Я хочу, чтобы фон рисовался только один раз, все последующие рисунки должны происходить на этом фоне. Я не хочу, чтобы среда выполнения Android рисовала фон каждый раз, когда она рисует мое представление, тем самым перезаписывая все рисунки, представленные в этом представлении, из предыдущих визуализаций. Есть ли способ обойти это?

Для этого я пробовал:

  1. Установка цвета фона моего SurfaceView с помощью android: background в XML.

  2. Делаем вышеописанное, используя концепцию стиля. (указав значение стиля и сделав ссылку на него в файле макета). Стиль просто определяет цвет фона как #FFFFFFFF (белый).

  3. Установка стиля 2 для родительского представления SurfaceView (RelativeLayout).

  4. Установка стиля 2 для всего приложения в качестве темы с помощью android: theme в моем файле манифеста.

  5. Настройка рисования фона моего SurfaceView для простого изображения белого цвета.

  6. Вызов setBackgroundColor для моего SurfaceView из кода как this.setBackgroundColor (Color.WHITE).

Спасибо.

7
задан sanjeev mk 15 December 2011 в 08:57
поделиться