Facebook lide slideout menu (Не использовать эту библиотеку)
Я хочу иметь в своем приложении facebook как меню. На этом есть много потоков, и все они предлагают использовать библиотеку, которая на самом деле просто снимает скриншот экрана и скользит по этому изображению вправо, чтобы показать меню с левой стороны и слайд-изображение с некоторым переходом. Но в этом случае макет справа не доступен для клика с его изображения.
Но у меня есть еще один способ сделать это, в котором у меня есть Root Layout, у которого уже есть макет меню и макет контента. Но корневой макет задает отрицательный запас по направлению к левому, поэтому он не виден. Как это -
![Content when menu is not pressed]()
Когда пользователь нажимает кнопку меню, макет меню сдвигается вправо, а левый край корневого макета установлен на 0. Теперь мы видим, что это -
![Content when menu is pressed and menu layout is shown]()
Теперь Настоящая проблема начинается здесь
Я хочу сместить оба макета с некоторой анимацией. Поэтому, когда я аниматирую макет меню и макет контента, анимация для обоих макетов не имеет такой же скорости, даже если я применяю к ней одну и ту же анимацию. Поэтому я попытался Сжать ROOT LAYOUT только вправо/влево, установив для него поле. Но при этом на экране ничего не отображается. Где я иду не так. Здесь показано, как я устанавливаю маржу -
int width = leftLayout.getWidth();
isLayoutShown = !isLayoutShown;
if(isLayoutShown){
rootLayoutParams.setMargins(0, 0, 0, 0);
rootLayout.setLayoutParams(rootLayoutParams);
}else{
rootLayoutParams.setMargins(-width, 0, 0, 0);
rootLayout.setLayoutParams(rootLayoutParams);
}
Ответы
Ответ 1
Наконец-то я смог это сделать. Здесь код, используемый при нажатии кнопки меню в верхнем левом углу:
@Override
public void onClick(View v) {
rootLayoutParams = new LayoutParams(rightLayout.getWidth(),
rightLayout.getHeight());
if (lhsMenu.getVisibility() == View.GONE) {
lhsMenu.setVisibility(View.VISIBLE);
Animation slideRight = setRightSlidingAnimation();
rightLayout.setAnimation(slideRight);
lhsMenu.setAnimation(slideRight);
} else {
Animation slideLeft = setLeftSlidingAnimation();
rightLayout.setAnimation(slideLeft);
lhsMenu.setAnimation(slideLeft);
lhsMenu.setVisibility(View.GONE);
}
}
Обновление: Также установите маржу слева и справа (если необходимо) rightLayout
, чтобы rightLayout не уменьшался.
_rightLayoutParams.setMargins(width, 0, -width, 0);
где width = 200
в моем случае.