Мое решение: использовать новый интерфейс снимков из GoogleMap и отображать снимок карты при прокрутке страницы.
Вот мой код для установки снимка (он находится в том же фрагменте, что и карта, называется 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;
}
}
Где «mapFragment» - это мой SupportedMapFragment, а «iv» - это ImageView (сделайте его match_parent).
И вот я управляю прокруткой:
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) {}
});
Мой фрагмент с картой (FragmentMap) находится в позиции 1, поэтому мне нужно управлять прокруткой с позиции 0 до 1 и с позиции 1 до 2 (первое предложение if). getRegisteredFragment () - это функция в моем пользовательском FragmentPagerAdapter, в котором у меня есть SparseArray (фрагмент) под названием «registerFragments».
Таким образом, всякий раз, когда вы прокручиваете карту или с нее, вы всегда видите ее снимок. У меня это работает очень хорошо.