2010-12-27 15 views
16

Próbuję animować widoki mojego podrzędnego w widoku rozwijanym. Chciałbym, aby widok podrzędny przesuwał się od góry do dołu podczas rozwijania grupy i przesuwania od dołu do góry, gdy zwija się grupę. Przyjrzałem się kilku metodom (animowaniu widoku grupy lub widokom podrzędnym), ale żaden z nich nie działa dobrze lub nie robię tego dobrze.animowanie elementów potomnych rozwinięciaelektronicznego widoku podczas zwijania/rozwijania

Rozszerzyłem klasę z BaseExpandableListAdapter, aby utworzyć własną niestandardową kartę. Mam również niestandardowe widoki (xml) dla grup/podrzędności, które nadymam w metodach getChildView i getGroupView.

Chciałbym tylko, aby aktualna zwinięta/rozwinięta grupa mogła animować swoje dziecko. Czy ktoś może wskazać mi właściwy kierunek? Jeśli potrzebujesz więcej informacji lub kodu, daj mi znać!

Pozdrawiam, Ivo

+0

znaleźliście jakieś rozwiązanie dla tego? Dzięki. – user430926

+0

Również znajduję rozwiązanie. Proszę pomóc – anshul

+0

Czy masz jakieś działające rozwiązanie? –

Odpowiedz

2

Możesz dodać animację do każdego widoku dzieci w metodzie bindChildView. Aby animować tylko element potomny bieżącej grupy - po prostu wychwyć zdarzenie onExpand, przeczytaj jego potomki, zapisz identyfikatory w pewnej macierzy, a na bindChildView - animuj tylko childs zapisane w tej tablicy.

+3

Czy możesz być bardziej spesific? Czy masz jakiś przykładowy kod? Dzięki. – user430926

+0

Wyjaśnię: Na bindChildView yo masz dostęp do obiektu Widok dziecka. Możesz użyć funkcji startAnimation do zastosowania animacji na obiekcie. Możesz ustawić przesunięcie dla każdego z nich, aby animacja była stopniowa. – Udinic

5

Więc to, co zrobiłem, to użyć zwykłego widoku list, a następnie animować widoki wierszy po kliknięciu.

Używam tego methode do animacji: Android animate drop down/up view proper

Może to być nieco kłopotliwe, jeśli wysokość na celu być spadł jest wrap_content dla tego problemu musiałem znaleźć i ustawić wysokość, zanim rozpocząć animacja:

public static void setHeightForWrapContent(Activity activity, View view) { 
    DisplayMetrics metrics = new DisplayMetrics(); 
    activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); 

    int screenWidth = metrics.widthPixels; 

    int heightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); 
    int widthMeasureSpec = MeasureSpec.makeMeasureSpec(screenWidth, MeasureSpec.EXACTLY); 

    view.measure(widthMeasureSpec, heightMeasureSpec); 
    int height = view.getMeasuredHeight(); 
    view.getLayoutParams().height = height; 
} 

Widok powinien zniknąć przed rozpoczęciem animacji, a następnie powinien być widoczny po rozpoczęciu animacji.

Edytuj: Zrobiłem pełny przykład here.

2

Innym rozwiązaniem jest użycie biblioteki Android SlideExpandableListView I napisał: https://github.com/tjerkw/Android-SlideExpandableListView

buduje na idei z Udinic i innych.

Więcej informacji można przeczytać w tym poście: http://tjerktech.wordpress.com/2012/06/23/an-emerging-android-ui-pattern-for-contextual-actions/

+0

Byłoby miło, gdyby można było wypełnić swoją odpowiedź z wyjaśnieniem, co jest na drugim końcu tych linków. Odpowiedzi tylko na link mają tendencję do gnicia. Dzięki. – Kev

+0

Fantastyczna praca TjerkW! – Slickelito

Powiązane problemy