Android BottomSheet адаптирует/уменьшает вид карты

Попытка имитировать текущую панель Google Maps внизу. Я так сильно потерпел неудачу и так много пытался; CollapsingToolbar, BottomSheet, пользовательские библиотеки.

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

Взгляните на это видео, чтобы понять, что я имею в виду (и я не имею в виду функция масштабирования)


comment
Вы нашли решение?   -  person pepela    schedule 29.09.2017
comment
Да, я использовал BottomSheet, чтобы перемещать, разворачивать и сворачивать свой контент, оставив карту позади. Чтобы адаптировать карту (размер и камеру по центру), я поместил некоторый код в BottomSheets onSlide и в его onStateChanged. И то, и другое можно сделать, просто соответствующим образом адаптировав заполнение карты. И выглядит гладко и круто ;-)   -  person EssenceBlue    schedule 01.10.2017
comment
Можете ли вы поделиться фрагментом карты и скольжения нижнего листа?   -  person ralphgabb    schedule 11.10.2018
comment
@ralphgabb смотрите полный ответ ниже.   -  person EssenceBlue    schedule 15.10.2018
comment
@EssenceBlue попробует. Спасибо.   -  person ralphgabb    schedule 16.10.2018


Ответы (1)


Библиотека BottomBar, которую я использовал, устарела. Но, возможно, мой код дает вам представление о том, как это можно сделать.

Я реагировал на события onSlide BottomSheet следующим образом:

@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
    switch (bssBehavior.getState()) {
        case BottomSheetBehavior.STATE_DRAGGING:
            setMapPaddingBotttom(slideOffset);
            searchVM.map.moveCamera(CameraUpdateFactory.newLatLng(lastValidMapCenter));
            break;
        case BottomSheetBehavior.STATE_SETTLING:
            setMapPaddingBotttom(slideOffset);
            searchVM.map.moveCamera(CameraUpdateFactory.newLatLng(lastValidMapCenter));
            break;
        case BottomSheetBehavior.STATE_HIDDEN:
            break;
        case BottomSheetBehavior.STATE_EXPANDED:
            break;
        case BottomSheetBehavior.STATE_COLLAPSED:
            break;
    }

И плавно изменил размер карты, изменив ее отступы. Для его расчета соответственно я использовал sth. как это.

private void setMapPaddingBotttom(Float offset) {
    //From 0.0 (min) - 1.0 (max)
    Float maxMapPaddingBottom = bsExpanded - bsCollapsed;
    //left,top,right,bottom
    searchVM.map.setPadding(0, 0, 0, Math.round(offset * maxMapPaddingBottom));
}
person EssenceBlue    schedule 15.10.2018
comment
Что такое переменные bsExpanded - bsCollapsed?? - person Marlon López; 21.04.2019
comment
maxMapPaddingBottom — это максимальная высота заполнения карты в пикселях, поэтому, умножив ее на процентное смещение, вы получите соответствующее значение в пикселях. И bsExpanded - это высота нижнего листа в пикселях, когда он развернут, а bsCollapsed - его размер, когда он свернут и показывает только тонкую полосу, например. некоторые кнопки или что-то, что указывало на то, что вы можете провести вверх, чтобы развернуть его. - person EssenceBlue; 21.04.2019