2013-03-30 38 views
5

Buduję aplikację dla systemu Android z wydarzeniami z określonym czasem i nie jestem pewien, jaki układ powinienem użyć do zbudowania mojej osi czasu.Tworzenie linii czasu przy użyciu widoku niestandardowego

Zdarzenia mogą mieć różne wysokości i mogą rosnąć, gdy użytkownik dotknie ich, ale mają tę samą szerokość;

   . 
       . 
       . 
------------- | 
| Event 4 > | -------------- 
------------- | < Event 7 | 
       | |   | 
       | -------------- 
       . 
       . 
       . 

Mam dwie zobacz typy:

  • EventView czarownica trzymają informacje o wydarzeniu i drow jego zarys
  • TimeBarView czarownica jest pasek na środku (jakieś własność i jest rozszerzony na bardzo długi okres

Jak mogę umieścić moje przedmioty tak, aby respektowały czas na mojej linii czasu (na przykład 1 tydzień może wynosić 10 pikseli)

Każda pomoc jest doceniana. Dzięki!

+0

Czy udało Ci się uzyskać ten widok? Udostępnij ten kod. –

+0

@ Czy każdy sukces jest ...? Proszę odpowiedzieć .. –

+0

@Pankaj Kumar Ci się udało? –

Odpowiedz

1

Zajmuję się teraz tym samym problemem.

nie mam pełne rozwiązanie jeszcze, ale mam pomysł:

Skoro masz do boków do osi czasu, ListView nie jest właściwe, ponieważ zdarzenia mogą się pokrywać.

Zamiast tego należy rozważyć użycie kolumny 2-kolumnowej GridView. Polecam używać AndroidStaggeredGrid, które obsługują różne rozmiary przedmiotów.

Dla rzeczywistego "paska czasu", który biegnie w środku, po prostu użyję wąskiej linii jako tła dla GridView.

Na osi czasu nie będzie żadnych znaczników. Zamiast tego, znaczniki będą same w EventView, z lewej lub z prawej strony, w taki sposób, że znacznik spada dokładnie na pasku czasu.

W ten sposób, po przewinięciu siatki, spowoduje to złudzenie, że pasek czasu sam się przewija.

Aby wskazać pusty przedział czasu, wystarczy dodać pusty widok, którego wysokość jest proporcjonalna do przedziału, który reprezentuje.

Mam nadzieję, że pomoże ...

+0

To by zadziałało :) – Romain

0

Nie jestem pewien, czy w twoim poście jest wystarczająco dużo informacji, aby dokładnie określić, co się dzieje podczas układania, ale RelativeLayout prawdopodobnie zrobi to, czego potrzebujesz. Możesz użyć leftMargin jako bezwzględnej pozycji lub "reguł", takich jak RelativeLayout.LEFT_OF

To bardzo proste, aby utworzyć niestandardowy układ z systemem Android. Wystarczy zastąpić onMeasure i onLayout. onMeasure powinien raportować, jak duży jest pojemnik (często tak duży, jak pozwala na to rodzic) i jest całkiem prosty.

onLayout zwykle wygląda następująco:

@Override 
protected void onLayout(boolean changed, int l, int t, int r, int b) { 
    int count = getChildCount(); 
    for (int i = 0; i < count; i++) { 
     View child = getChildAt(i); 
     if (child.getVisibility() != GONE) { 
      // do the layout for each child here, with child.layout 
      // e.g., child.layout(0, 0, r, b); 
    } 
} 

View.layout trwa 4 argumenty - w górę, w lewo, dół, prawo - i całkiem proste. Masz dostęp do wymiarów kontenera w l, t, r i b.

HTH

Powiązane problemy