Пустой экран Android Google Map API V2 с вложенными фрагментами

Я работаю над приложением для Android с расширенной интеграцией Google Maps API V2. Я использую SupportFragment, и все работало нормально, пока я не начал помещать карту в еще один дочерний фрагмент — существует глубокая иерархия фрагментов:

SplitViewFragment->RightChildFragment->ViewPagerFragment->SupportMapFragment

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

Пока все хорошо — все работает очень хорошо на устройствах Android 4.3+, но на более низких уровнях API фрагмент карты всегда остается пустым/прозрачным — видны логотип Google и элементы управления масштабированием. Нет ошибки logcat. Google Map работает на том же устройстве, когда я удаляю один вложенный фрагмент; так что это не проблема аутентификации, как часто описывают.

Я также безуспешно пытался инициализировать MapFragment с помощью zOrderOnTop:

GoogleMapOptions options = new GoogleMapOptions(); options.zOrderOnTop(true); SupportMapFragment mapFragment = SupportMapFragment.newInstance(options);

Я потратил два полных дня, пытаясь найти ответ на эту проблему, и провел обширное исследование - безуспешно.

Я так жду ваших ответов. Бесконечно благодарен!


person goon    schedule 03.09.2015    source источник


Ответы (2)


Однажды я столкнулся с этой проблемой. Надеюсь, эта ссылка поможет вам :)

спасибо jcampbell05

Если вы использовали SupportMapFragment на старых устройствах Android, то знаете, как это может раздражать, когда он оставляет черный ящик всякий раз, когда вы прокручиваете ListView, ScrollView или ViewPager.

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

person milcaepsilon    schedule 03.09.2015
comment
Большое спасибо за ваш быстрый ответ - я уже нашел эту пользовательскую реализацию SuppportMapFragment - к сожалению, она не решает проблему - DrawingView в этом примере представляет собой TextureView на проблемном устройстве - код возвращается в строке 146. Это так запутанно - Мне так грустно, потому что тогда вся концепция не работает. - person goon; 03.09.2015

Невероятно - у меня есть представление анимации в иерархии с аппаратным ускорением - я удалил ускорение для уровней API ‹ 18, так как есть проблема с clipPath:

setLayerType(View.LAYER_TYPE_SOFTWARE, null);

Исправил, убрав деактивацию аппаратного ускорения. Я должен найти другое решение, чтобы отключить аппаратное ускорение.

Большое спасибо за твою помощь.

person goon    schedule 03.09.2015