2012-02-26 11 views
8

Pracuję nad aplikacją, w której chciałbym zaimplementować funkcję odsuwania do końca w ListView - podobną do tego, co widzimy na pasku powiadomień systemu Android 4.0, na ostatniej liście aplikacji lub na kartach przeglądarki. Chcę uruchomić aplikację na urządzeniach z Androidem 2.2+. Zobacz następujący obraz. Chcę również zmienić przezroczystość przesuwania elementu - tak jak w ICS.Jak zaimplementować Androida 4.0, jak przesunąć, aby odrzucić funkcjonalność w ListView?

Android 4.0 Web Browser - Swiping away the open tabs http://img19.imageshack.us/img19/3605/screenshot2012022617290.png

sprawdziłem źródło przeglądarce internetowej ICS na http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android-apps/4.0.1_r1/com/android/browser/TabScrollView.java?av=f ale nie mogliśmy zorientować się, która klasa jest szczególnie odpowiedzialny za wdrożenie tej funkcji.

Czy ktoś może wskazać mi właściwy kierunek? Czy możemy to zrobić za pomocą Biblioteki zgodności Androida? Proszę daj mi znać. Wielkie dzięki.

Odpowiedz

0

Wiem, że to dość stare pytanie, ale dla każdego, kto wciąż szuka tego, możesz zajrzeć do biblioteki Roman Nurik tutaj: https://github.com/romannurik/Android-SwipeToDismiss

To pokazuje, jak utworzyć wymagane zachowanie dla widoku listy, jak również dla normalnych widoków.

3

Zastanowiłem się również nad wdrożeniem takiej funkcji, ale jeszcze jej nie zrobiłem. Jedyne, co mogę dostarczyć, to kilka pomysłów na rozwiązanie tego problemu. Jeśli w końcu napisałem jakiś kod, opublikuję go tutaj.

  1. Główna wymagana klasa to niestandardowy adapter rozszerzający ListAdapter (ArrayAdapter, SimpleCursorAdapter itd.).
  2. Adapter stosuje View.OnTouchListener do wszystkich swoich widoków.
  3. Za każdym razem, gdy słuchacz wykrywa poziomy zwój dx, wywołuje concernedView.offsetLeftAndRight(dx) (co spowoduje, że widok będzie można przeciągnąć). Oczywiście adapter musi zapisać bieżące przesunięcie w poziomie dla widoku. Jeśli użytkownik przeciągał widok i usuwał swój palec z ekranu, touchListener również to wykryje i uruchomi animację zsuwania. Korzystając z bieżącego offsetu możemy również obliczyć wartość alfa, więc widok zniknie, gdy zbliży się do granic ekranu.
  4. Jeśli jeden wpis listy zostanie w końcu usunięty przez użytkownika, staje się on nieco trudny i nadal nie jestem pewien, jak zaimplementować następującą akcję: Zawartość listy musi zostać zaktualizowana (lub adapter musi zignorować odwołane zgłoszenia), a opinie poniżej tego, które zostały odrzucone, muszą zawisnąć w górę, aby wypełnić lukę. Myślę, że może to sprawić, że ListView załaduje nową zawartość, ale natychmiast wypełniłoby to lukę. Aby tego uniknąć, chciałbym rozpocząć animację, która pozwala wszystkim zainteresowanym obserwacjom zawisnąć z ich dotychczasowej pozycji (gdzie wciąż mieliśmy lukę) z powrotem do ich aktualnej pozycji (gdzie luka jest wypełniona).

To tylko niektóre z moich przemyśleń na ten temat, które mogą pomóc niektórym osobom w rozpoczęciu pracy nad problemem. Tak jak powiedziałem, prawdopodobnie zamierzam to zaimplementować kiedyś w przyszłości i oczywiście opublikuję tutaj kod.
Będę wdzięczny za wszelkie opinie w komentarzach, ale nie chcę, aby thorougly wyjaśnić każdy aspekt mojego pomysłu, że zajęłoby mi zbyt wiele czasu;)

+0

Cóż, to jest początek. Spróbuję stworzyć coś na podstawie tego i zaktualizuję tutaj, jeśli się uda. – iamronak

+3

Zanim usuniesz widok, animuj jego wysokość do 0. To sprawi, że lista ładnie się zapadnie. Wtedy powiadomienie nie będzie drażniącym krokiem. – Hounshell

Powiązane problemy