Слайд-меню Facebook (без использования этой библиотеки)

Я хочу, чтобы в моем приложении было меню, похожее на facebook. Об этом много тем, и все они предлагают использовать библиотеку, которая на самом деле просто делает снимок экрана и сдвигает это изображение вправо, чтобы отобразить меню слева и скользить изображение с некоторым переходом. Но в этом случае макет справа не активен, так как это изображение.

Но у меня есть другой способ сделать это, в котором у меня есть корневой макет, который уже имеет макет меню и макет содержимого. Но корневой макет имеет отрицательный запас слева, поэтому он не виден. Так-

Содержимое, когда меню не нажато

Когда пользователь нажимает кнопку меню, макет меню сдвигается вправо, а левое поле корневого макета устанавливается на 0. Итак, теперь мы видим следующее:

Содержимое при нажатии меню и отображении макета меню

Итак, настоящая проблема начинается здесь.

Я хочу сдвинуть оба макета с некоторой анимацией. Поэтому, когда я анимирую макет меню и макет содержимого, анимация для обоих макетов не с одинаковой скоростью, даже если я применяю к нему одинаковую анимацию. Поэтому я попытался сдвинуть только 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);
}

person Rajkiran    schedule 04.07.2012    source источник
comment
Вам повезло с этим?   -  person EGHDK    schedule 07.07.2012
comment
Да, проблема как-то решается. Пожалуйста, проверьте ответ ниже.   -  person Rajkiran    schedule 10.07.2012
comment
Возможно, вы захотите посмотреть ответы на этот вопрос: stackoverflow.com/q/17884277/1491212   -  person Armel Larcier    schedule 22.02.2014
comment
Можете ли вы опубликовать полную кодовую базу проекта?   -  person Sam    schedule 05.03.2014


Ответы (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 в моем случае.

person Rajkiran    schedule 10.07.2012