Czy można zastosować animację rozwijania lub zwijania dla expandableListView?Animacja do rozbudowyListView
Odpowiedz
Można to zrobić za pomocą prostego ListView, który zawiera początkowo ukryty widok i niestandardową klasę, która rozszerza animację. Podstawową ideą jest zacząć od View.GONE
, a następnie stopniowo zmieniać rozmiar marginesu z wartości ujemnej na wymagany rozmiar, ustawiając widoczność na View.VISIBLE
.
Patrz:
- https://github.com/tjerkw/Android-SlideExpandableListView
- Android Animation: Hide/Show Menu
- How do I animate View.setVisibility(GONE)
..i wreszcie
Ostatni przykład zawiera cały potrzebny kod. Wygląda na to, że jestem trochę hackowaty, szczególnie, że najpierw musisz ustawić view.bottomMargin = -50
lub więcej, w przeciwnym razie animacja nie działa poprawnie za pierwszym razem, ale jak dotąd nie znalazłem żadnej realnej alternatywy (poza używaniem ScrollView z własną elementy kontenera zamiast ListView).
I wreszcie, ta aplikacja zawiera powyższy przykład, wśród wielu innych przydatnych przykładów wraz z odnośnikami do źródeł:
Aktualizacja: Google usunął aplikację ze sklepu Play rzekomo dla intelektualnej naruszenie własności (choć zawierało tylko wersje demonstracyjne i linki do projektów open source), autor udostępnił teraz plik APK do bezpośredniego pobrania z http://goo.gl/ihcgs . Aby uzyskać więcej informacji, zobacz: https://plus.google.com/108176685096570584154/posts. NB: Nie jestem związany z autorem.
Dzięki za link do aplikacji ui patterns. – howettl
, ale straci to cały sens używania listView, ponieważ wszystkie elementy wewnątrz grupy (które należy rozwinąć) muszą znajdować się wewnątrz niego. jeśli masz tam dużo przedmiotów, będziesz musiał tam również stworzyć wiele widoków ... –
@android developer: możesz lepiej skorzystać z ScrollView, zapełnić widokami i zastosować do nich animacje wymagany. ListView jest złożonym komponentem, który jest zoptymalizowany pod kątem dużych list; jeśli masz tylko tuzin przedmiotów, widok przewijania może być łatwiejszy do animacji - stwórz własny komponent blokowy i animuj widoki w nim, jak chcesz. Główną wadą w porównaniu z ListView jest to, że android nie będzie tworzyć/niszczać twoich przedmiotów, ponieważ są one przewijane do i z obszaru widoku, a pojemniki nie będą ponownie używane, ale jeśli masz kilka przedmiotów, to nie jest wielka sprawa . – ccpizza
Wykonałem podobną pracę dla prostego widoku listy. W tym celu przesłoniłem metodę getView i zastosowałem translację animacji w górę (lub w dół) na każdej pozycji listy. O stopniu tłumaczenia decydowała pozycja na liście pozycja.
https://github.com/idunnololz/AnimatedExpandableListView/ –
Znalazłem możliwe (częściowe) obejście tego problemu.
najpierw trzeba zapisać stan zwoju ExpnadableListView:
@Override
public void onScrollStateChanged(final AbsListView view, final int scrollState) {
this.mScrollState = scrollState;
}
public int getScrollState() {
return this.mScrollState;
}
dla samego ListView, trzeba przechowywać której grupy został kliknięty, tak, że tylko jego dzieci będą się animowany:
mListView.setOnGroupClickListener(...
@Override
public boolean onGroupClick(...){
mGroupPosition=groupPosition;
teraz w sposobie getChildView(), sprawdzić stan przewijania, a jeśli jest bezczynny, należy uruchomić animację, na przykład:
public View getChildView(...) {
// <=prepare rootView and return it later
if (groupPosition==mGroupPosition&&getScrollState() == OnScrollListener.SCROLL_STATE_IDLE)
rootView.setAnimation(...)
spowoduje to ustawienie animacji dla widoków potomnych przy każdym rozszerzeniu grupy.
wadą tego są:
- tylko dla rozbudowanych widoków podrzędnych. będziesz musiał pomyśleć o dodatkowej logice, aby ożywić je po zwijaniu grupy.
- wszystkie animacje rozpoczynają się od razu. będziesz musiał dodawać wiele animacji jeden po drugim, jeśli chcesz, aby działało inaczej.
To ciekawe podejście, ale z tego, czego się dowiedziałem, dziecko * przedmioty * nie są widokami * dziecka *, ale rodzeństwem. Czy animujesz wszystkie dzieci z oddzielnymi animacjami lub dokładnie jak to robisz? ? Przykładowy kod? – Nilzor
@Nilzor Zrobiłem to dawno temu, a wymóg animacji został usunięty ze względu na krótki czas, kiedy musiałem nad tym popracować Niestety, –
Nie prob, dzięki za skontaktowanie się ze mną. Dla każdego, kto tam jest, problem wciąż pozostaje nierozwiązany, chociaż wydaje mi się, że powinno to być rozwiązanie tego problemu przez Google, jeśli poważnie traktują wytyczne dotyczące Material Design – Nilzor
- 1. Jquery - Animacja do wysokości: auto
- 2. Animacja skali UIView do zera
- 3. Angular 4 animacja do wysokości *
- 4. Niestandardowa animacja do przesuwania UIViewController
- 5. góry do dołu - tłumaczyć animacja
- 6. Animacja iOS Animacja obrotu pod kątem
- 7. Animacja przewijania
- 8. Pulsowanie Animacja
- 9. Animacja ikony FloatingActionButton (animacja rysowania FAB src)
- 10. Animacja orbitalna
- 11. Meteor Animacja
- 12. JavaScript animacja
- 13. kątowa animacja
- 14. Animacja UIWindow
- 15. Animacja addSubview
- 16. Animacja Matplotlib
- 17. VideoView Animacja
- 18. :: animacja wyboru
- 19. Animacja dwuwarstwowych elementów do rysowania Pre-Honeycomb
- 20. jquery animacja do min-height lub auto
- 21. XAML - Prosta animacja do prostego sterowania niestandardowego
- 22. Animacja wysokości groupbox od 0 do auto
- 23. Animacja przewijania do identyfikatora przy ładowaniu strony
- 24. animacja css3 powraca do pierwotnego stanu
- 25. Animacja CSS - pozycja do oryginalnego miejsca
- 26. animacja kątowa 2 a animacja css - kiedy użyć czego?
- 27. animacja z dwoma interpolatorami
- 28. animacja przejścia presentViewController
- 29. Animacja w SMIL
- 30. Swift 3 UIView animacja
Nie sądzę, że można zrobić różnicę między wierszami, animując, mimo że umieszczam slajd w lewo/w prawo w widoku, który pokazuję jako dziecko. To naprawdę działa tylko dlatego, że jest tylko jedno dziecko. – skorulis