Moje obejście: skorzystaj z nowego interfejsu migawki z GoogleMap i wyświetl migawkę mapy podczas przewijania strony.
Oto mój kod do ustawiania migawki (znajduje się w tym samym fragmencie co mapa, o nazwie 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;
}
}
Gdzie „mapFragment” to mój SupportedMapFragment, a „iv” to ImageView (ustaw go jako match_parent).
I tutaj kontroluję zwoje:
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) {}
});
Mój fragment z mapą (FragmentMap) znajduje się na pozycji 1, więc muszę kontrolować przewijanie od pozycji 0 do 1 i od pozycji 1 do 2 (pierwsza klauzula if). „getRegisteredFragment ()” to funkcja w moim niestandardowym FragmentPagerAdapter, w której mam SparseArray (Fragment) o nazwie „registeredFragments”.
Tak więc za każdym razem, gdy przewijasz do lub z mapy, zawsze widzisz jej migawkę. U mnie to działa bardzo dobrze.