2012-07-04 16 views
5

Chcę mieć menu typu facebook w mojej aplikacji. Istnieje wiele wątków na ten temat i wszystkie z nich sugerują użycie biblioteki, która po prostu robi zrzut ekranu i przesuwa obraz w prawo, aby wyświetlić menu po lewej stronie i przesuwać obraz z pewnym przejściem. Ale w takim przypadku układ po prawej stronie nie jest klikalny, ponieważ jest obrazem.Menu wysuniecia z Facebooka (Nieużywanie tej biblioteki)

Ale mam jakiś inny sposób to robić, w którym mam Układ Korzeń który już ma układ menu i układ treści. Ale układ korzeniowy jest ustawiony trochę ujemny margines w lewo, więc nie jest widoczny. Jak to-

Content when menu is not pressed

Gdy użytkownik naciśnie przycisk menu, układ menu jest wsuwany do lewego marginesu prawego i korzeń layoutu jest ustawiony na 0. Więc teraz to, co widzimy jest to-

Content when menu is pressed and menu layout is shown

teraz prawdziwy problem zaczyna się tutaj

chcę przesunąć oba układy z pewnym animacji. Więc kiedy animuję układ menu, to układ animacji obu układów nie ma takiej samej prędkości, nawet jeśli zastosuję do niego tę samą animację. Więc próbowałem Shift ROOT LAYOUT only w prawo/lewo, ustawiając margines do niego. Ale robiąc to nic nie wyświetla się na ekranie. Gdzie idę źle. Sposób ustawiania marginesu jest pokazany tutaj:

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); 
} 
+0

Czy masz na to szczęście? – EGHDK

+0

Tak, problem jest jakoś rozwiązany. Sprawdź odpowiedź poniżej. – Rajkiran

+0

Możesz zajrzeć do odpowiedzi na to pytanie: http://stackoverflow.com/q/17884277/1491212 –

Odpowiedz

4

W końcu jakoś mogłem to zrobić. Oto kod używany po kliknięciu na przycisk menu w lewym górnym rogu:

@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); 
    } 
} 

Aktualizacja: ustawić także margines (w razie potrzeby) na lewo i na prawo od rightLayout tak że rightLayout nie będzie się kurczyć.

_rightLayoutParams.setMargins(width, 0, -width, 0);

gdzie width = 200 w moim przypadku.