1

У меня возникли проблемы с настройкой ViewPager с использованием PageTransformer и MapView. Проблема заключается в том, что, когда viewpager настроен на использование PageTransformer, mapview исчезает (становится прозрачным) во время панорамирования. Однако, если я не использую трансформатор и просто панорамирование, Mapview в порядке. Кто-нибудь знает, что вызывает такое поведение?Android MapView исчезает с помощью ViewPager и PageTransformer

В настоящее время PageTransformer ничего не делает, но просто устанавливает, что это влияет на способ рисования карты. Следует отметить, что карта становится прозрачной, пока сохраняется карта (Официальное уведомление). Когда ViewPager переходит в состояние ожидания, отображается Карта.

viewPager.setPageTransformer(true, this); 
... 
@Override 
public void transformPage(View view, float position) { 
} 

XML: ViewPager Фрагмент

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#FFFFFF"> 
     <com.google.android.gms.maps.MapView 
        android:id="@+id/mapcontainer" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:clickable="false"/> 
</FrameLayout> 

Карта Фрагмент:

private GoogleMap map; 
private MapView mapView; 
private Bundle mapBundle; 

@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    mapBundle = savedInstanceState; 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.mapfragment, container, false); 
    MapsInitializer.initialize(getActivity()); 
    mapView = (MapView) rootView.findViewById(R.id.mapcontainer); 
    mapView.onCreate(mapBundle); 

    map = mapView.getMap(); 

    return rootView; 
} 
@Override 
public void onResume(){ 
    super.onResume(); 
    mapView.onResume(); 
} 

@Override 
public void onPause(){ 
    super.onPause(); 
    mapView.onPause(); 
} 

@Override 
public void onDestroy(){ 
    super.onDestroy(); 
    mapView.onDestroy(); 
} 
+0

Для MapView вставить некоторую задержку после использования обработчика загрузки карты в вашем ViewPager. И скажите мне, что это решает вашу проблему –

ответ

1

Я нашел решение от обсуждения нити Bug: Black rectangle background on scroll, что указал мне в правильном направлении. В Google Play Services есть некоторые ошибки, которые можно решить, установив карту в «Lite Mode». В моем случае это сделал трюк, и карта теперь работает в pagetransformer. Из того, что я понимаю, режим Lite изменяет карту на растровое изображение. Вы можете прочитать об этом здесь Google Maps - Lite Mode. Режим Lite имеет некоторые ограничения, такие как невозможность панорамирования или масштабирования, но в моем случае это не является обязательным требованием.

Я обновил свой XML на это:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="#FFFFFF"> 
    <com.google.android.gms.maps.MapView 
       xmlns:map="http://schemas.android.com/apk/res-auto" 
       android:id="@+id/mapcontainer" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:clickable="false" 
       map:liteMode="true"/> 
</FrameLayout> 

Вы также можете установить этот параметр в коде:

GoogleMapOptions options = new GoogleMapOptions().liteMode(true); 
MapView mapView = MapView (context, options);