Вот чего я хочу добиться.
Когда я нажимаю кнопку FAB
, меню будет отображаться внизу экрана.
Когда меню открывается / закрываетсяразмер карты должен быть изменен, чтобы при анимировании меню не было пустого пространства.
Моя проблема в том, что когда я анимирую контейнер карты (ViewPager), контейнер анимируется должным образом, но карта растягиваетсявместо изменения размера до нужных размеров.
У меня есть ViewPager с TabLayout, который отображает фрагмент на странице:
- страница 1 (карта Google)
- страница2,3 и т.д ..
Вот мой код меню переключения:
public void animateFAB(FABStates state) {
if (state.equals(FABStates.show)) {
isFABOpen = true;
viewPager.animate()
.scaleY(1f)
.setInterpolator(INTERPOLATOR)
.setDuration(500);
mapUtilsContainer.animate().scaleY(1f)
.setInterpolator(INTERPOLATOR)
.setDuration(500);
MapView mapV = mapFragment.getMapView();
ViewGroup.LayoutParams lps = mapV.getLayoutParams();
lps.height = ViewGroup.LayoutParams.MATCH_PARENT;
mapV.requestLayout();
// for (int v = 0; v < FABMenu.length; v++) {
// FABMenu[v].animate().translationX(0).setStartDelay(90 * v);
// }
} else {
isFABOpen = false;
mapUtilsContainer.setPivotY(mapUtilsContainer.getMeasuredHeight());
mapUtilsContainer.setPivotX(0);
viewPager.animate()
.scaleY(1.5f)
.setInterpolator(INTERPOLATOR)
.setDuration(500);
mapUtilsContainer.animate()
.scaleY(0f)
.setInterpolator(INTERPOLATOR)
.setDuration(500);
MapView mapV = mapFragment.getMapView();
ViewGroup.LayoutParams lps = mapV.getLayoutParams();
lps.height = ViewGroup.LayoutParams.MATCH_PARENT;
mapV.requestLayout();
// for (int v = 0; v < FABMenu.length; v++) {
// FABMenu[v].animate().translationX(10000).setStartDelay(90 * v);
// }
}
}
Опция 2
public void animateFAB(FABStates state) {
if (state.equals(FABStates.show)) {
isFABOpen = true;
ValueAnimator va = ValueAnimator.ofInt(ViewGroup.LayoutParams.WRAP_CONTENT, 0);
va.setDuration(500);
va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
public void onAnimationUpdate(ValueAnimator animation) {
Integer value = (Integer) animation.getAnimatedValue();
mapUtilsContainer.getLayoutParams().height = value.intValue();
mapUtilsContainer.requestLayout();
}
});
va.start();
View v = findViewById(R.id.coordinator_layout);
v.requestLayout();
// for (int v = 0; v < FABMenu.length; v++) {
// FABMenu[v].animate().translationX(0).setStartDelay(90 * v);
// }
} else {
isFABOpen = false;
ValueAnimator va = ValueAnimator.ofInt(0, ViewGroup.LayoutParams.WRAP_CONTENT);
va.setDuration(500);
va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
public void onAnimationUpdate(ValueAnimator animation) {
Integer value = (Integer) animation.getAnimatedValue();
mapUtilsContainer.getLayoutParams().height = value.intValue();
mapUtilsContainer.requestLayout();
}
});
va.start();
View v = findViewById(R.id.coordinator_layout);
v.requestLayout();
// for (int v = 0; v < FABMenu.length; v++) {
// FABMenu[v].animate().translationX(10000).setStartDelay(90 * v);
// }
}
}
Используется ли здесь WRAP_CONTENT
неправильно?