La mia soluzione alternativa: utilizza la nuova interfaccia snapshot di GoogleMap e visualizza un'istantanea della mappa mentre scorri la pagina.
Ecco il mio codice per impostare lo snapshot (è nello stesso frammento di map, chiamato FragmentMap.java):
public void setSnapshot(int visibility) {
switch(visibility) {
case View.GONE:
if(mapFragment.getView().getVisibility() == View.VISIBLE) {
getMap().snapshot(new SnapshotReadyCallback() {
@Override
public void onSnapshotReady(Bitmap arg0) {
iv.setImageBitmap(arg0);
}
});
iv.setVisibility(View.VISIBLE);
mapFragment.getView().setVisibility(View.GONE);
}
break;
case View.VISIBLE:
if(mapFragment.getView().getVisibility() == View.GONE) {
mapFragment.getView().setVisibility(View.VISIBLE);
iv.setVisibility(View.GONE);
}
break;
}
}
Dove "mapFragment" è il mio SupportedMapFragment e "iv" è un ImageView (rendilo match_parent).
E qui sto controllando la pergamena:
pager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if(position == 0 && positionOffsetPixels > 0 || position == 1 && positionOffsetPixels > 0) {
((FragmentMap)adapter.getRegisteredFragment(1)).setSnapshot(View.GONE);
} else if(position == 1 && positionOffsetPixels == 0) {
((FragmentMap)adapter.getRegisteredFragment(1)).setSnapshot(View.VISIBLE);
}
}
@Override
public void onPageScrollStateChanged(int arg0) {}
@Override
public void onPageSelected(int arg0) {}
});
Il mio frammento con mappa (FragmentMap) è in posizione 1, quindi devo controllare lo scorrimento dalla posizione 0 alla 1 e dalla posizione 1 alla 2 (la prima clausola if). "getRegisteredFragment ()" è una funzione nel mio FragmentPagerAdapter personalizzato, in cui ho uno SparseArray (Fragment) chiamato "registeredFragments".
Quindi, ogni volta che scorri verso o dalla tua mappa, ne visualizzi sempre un'istantanea. Questo funziona molto bene per me.