У меня есть приложение для рисования, которое загружает рисунок для сложных рисунков примерно за 2-5 секунд (выполняется с помощью AsyncTask
). Для лучшего взаимодействия с пользователем в это время я прошиваю сохраненную версию чертежа в формате PNG из каталога приложения как ImageView
и показываю загрузку ProgressBar
, вызывающую setContentView ()
в конструкторе Activity:
Когда AsyncTask
завершена, я снова вызываю setContentView ()
с новым макетом:
Когда я использовал простая модель Canvas
, это работало отлично, так как пользовательский DrawingCanvas View
рисовал бы рисунок на экране в исходном onDraw ()
перед тем, как показать его пользователю. пользователь, но теперь, используя SurfaceView
с циклом рисования, я вижу мигающий макет, затем, когда рисунок загружен, черный экран примерно на секунду, а затем, наконец, новый DrawingCanvas.
Я предполагаю, что причина связана со временем запуска потока цикла отрисовки, и я оставил свою замену onDraw ()
в SurfaceView
, и он вызывается, но холст, доступный в onDraw ()
, похоже, не обращается к SurfaceView
. Я также пробовал установить сплошной цвет фона в приведенном выше XML, надеясь, как минимум, показать белый фон, но они, похоже, никогда не влияют, даже устанавливая его из кода.
Какие-либо советы или объяснения того, что я вижу на черном экране?
РЕДАКТИРОВАТЬ:
Хорошо, вы подтвердили, что onDraw () рисует на том же холсте, поэтому оставил там мои операции рисования надеясь, что при первоначальном показе SurfaceView пользователь увидит эти рисунки, как в обычной реализации Canvas, а когда поток рисования развернется, он перезапишет Canvas.
Однако, если я очищу операции рисования потоков, я действительно увижу результаты onDraw (), но опять же ПОСЛЕ мигания черного экрана. И если я полностью удалю переопределение onDraw (), я все равно вижу черную вспышку, а затем я вижу макет с белым фоном из XML.
Итак, похоже, что несмотря ни на что, я всегда буду видеть черный экран, если, возможно, вместо переключения макетов я просто изменю существующий макет «flash», который уже активен?
EDIT2:
Пробовали использовать ViewStub , чтобы я мог надуть SurfaceView в существующий View после загрузки заметки, но та же проблема все еще применяется. Насколько я могу судить, существует значительная задержка (~ 200 мс) между конструктором SurfaceView и вызовом функции surfaceCreated (), но я не уверен, что именно здесь происходит черный экран или почему экран отрисовывается на черный ...
РЕДАКТИРОВАТЬ3:
Моя последняя попытка на данный момент включает в себя сделать SurfaceView прозрачным .Это в сочетании с оставлением существующего макета на месте и простым добавлением в этот макет через ViewStub привело бы к рабочему решению, хотя я, но все же, в течение доли секунды, когда SurfaceView загружает, экран мигает черным перед отображением SurfaceView, как прозрачный. Если у кого-то есть другие идеи, пожалуйста, опубликуйте их.