2016-11-03 8 views
9

Pracuję z wersją CoordinatorLayout, w której pozycje widoków podrzędnych są animowane za pomocą interfejsów API ViewCompat.offsetLeftAndRight i .Różnica między setTranslationX/Y i offsetLeftAndRight/offsetTopAndBottom?

Po dodaniu lub usunięciu widoku podrzędnego z CoordinatorLayout, operacja układu resetuje pozycję każdego dziecka do lewego górnego rogu ekranu, tj. Bez żadnego przesunięcia.

To rozwiązanie zapewnia rozwiązanie article, ustawiając detektor układu na widoku podrzędnym i przywracając stare pozycje.

Zauważyłem, że przy użyciu interfejsów API setTranslationX i setTranslationY ten problem nie występuje. Dzieci zachowują swoją pozycję po zdarzeniach układu nadrzędnego.

W jaki sposób powinienem zdecydować się między tymi dwoma zestawami interfejsów API do ustawiania moich widoków na ekranie? Uważam, że nie używam ich bez zrozumienia różnic. Nie zrozumiałem dobrze czytając oficjalną dokumentację.

Odpowiedz

1

dość stare pytanie, po wielu miesiącach Mam kilka wyjaśnień:

początek. Przesunięcie przesunie widok w poziomie lub w pionie, podobnie jak w tłumaczeniu, ale jest używany do stałych wyników.

Podczas korzystania View#offsetTopAndBottom(int offset) następnie wewnętrznie ma te funkcje:

mTop += offset; 
mBottom += offset; 

Z drugiej tranlate ręka jest zmienną, która jest obliczana w uzupełnieniu do tego góra/dół/w lewo pozycji/i przeważnie poręcznym w animacji .

Obie metody będą powodować odświeżenie układu, jeśli zajdzie taka potrzeba.

Więcej zostały wyjaśnione przez Nick Butcher w ten miły VIDEO: https://www.youtube.com/watch?v=86p1GPEv_fY&t=5m42s

Odnośnie CoordinatorLayout jesteś o każdej zmianie ustawień marginesów do dzieci? Na przykład. BottomSheetBehavior nie działa dobrze z marginesami, ponieważ ignoruje je. Myślę, że tak może być w twoim przypadku.