Oto jak pójdę o osiągnięcie efektu pragnienie:
Każda pozycja na liście powinna mieć czerwony pasek w nim, że to wysokość elementu. W ten sposób wszystkie czerwone paski ustawiają się tak, aby wyglądało, jakby był tylko jeden czerwony pasek, gdy w rzeczywistości jest jeden element.
Jeśli używasz FrameLayout
, kolejność dzieci określa kolejność rysowania, na przykład trzecie dziecko FrameLayout
pojawi się na pierwszym i drugim potomku.
Następnie w czasie wykonywania można ustawić czerwony pasek powyżej lub poniżej zawartości każdego elementu. W metodzie bindView
adaptera można użyć metody bringToFront
, aby ustawić czerwony pasek z przodu dla tego widoku. Nie zapominaj, że widoki są ponownie przetwarzane w ListView
, więc będziesz musiał przesunąć czerwony pasek, aby za każdym razem korygować pozycję z.
Oto przykładowy plik XML w bardzo uproszczonym przykładzie dla elementu w widoku, daj mi znać, jeśli potrzebujesz więcej informacji.
item_red_bar_bottom.xml:
<FrameLayout ...>
<ImageView .../> <!-- Red bar on bottom -->
<FrameLayout ...>
<!-- Normal item contents go here -->
</FrameLayout>
</FrameLayout>
Podobnie jak dowolnej wartości można zmienić 'Z-index' tak, że obiekt porusza się do przodu lub do tyłu w pozycji widoku, gdy użytkownik wchodzi w interakcję ze stroną. – Andrew
@Andrew zmieniając indeks Z widoku zmieni po prostu pozycję ** względem swoich widoków rodzeństwa **. W 'ListView' wszystkie pozycje na liście są rodzeństwem, ale zmiana indeksu Z nie będzie miała żadnego wpływu, ponieważ elementy listy nie pokrywają się. Zmiana indeksu Z jednego elementu na liście ** nie spowoduje przeskoczenia do przodu, aby znaleźć się przed innym widokiem, który ** nie jest rodzeństwem widoków w 'ListView' **. –