Chciałbym zrobić prostą kontrolę: kontener z widokiem do środka. Jeśli dotknę pojemnika i poruszę palcem, chcę przesunąć widok, aby podążał za moim palcem.
Jakiego rodzaju kontenera (układu) powinienem użyć? Jak to zrobić?
Nie potrzebuję powierzchni, ale prosty układ.
Odpowiedzi:
Coś takiego:
W
main.xml
tylkoRelativeLayout
z@+id/root
źródło
layoutPrarms.rightMargin = -250
i to samobottomMargin
!! Możesz to wyjaśnić? W każdym razie bardzo dziękuję !!Znalazłem łatwe podejście do tego z ViewPropertyAnimator:
źródło
setX
isetY
bezpośrednio, zamiast zastosować animację o czasie trwania 0.Zgodnie z podejściem @Andrey, jeśli chcesz przesunąć widok od jego środka, wystarczy odjąć do ruchu tylko połowę wysokości i szerokości widoku.
źródło
Ta sama implementacja w Kotlinie
źródło
Dotknij kontenera, a widok podąży za Twoim palcem.
kod xml
Kod Java
źródło
Zalecam używanie view.translationX i view.translationY do przenoszenia widoków.
Fragment Kotlina:
źródło
Utwórz niestandardową klasę nasłuchiwania dotyku (w Kotlin):
(Ten kod ogranicza możliwość przeciągania widoku poza widok nadrzędny)
Jak tego użyć?
parentView
jest rodzicem twojego poglądu.źródło
W poniższym kodzie utworzyłem coś o nazwie
RegionView
( git ), który jest kontenerem wielokrotnego użytku odpowiedzialnym za zarządzanie operacjami przeciągania i powiększania dla każdego z jego zagnieżdżonych elementów potomnych.Tutaj, manipulowania
top
ileft
współczynniki dzieckaView
„SLayoutParams
W celu symulacji przepływu o schemacie. Oddzielając interpretację obsługi tego, co jest rozumiane jako operacja przeciągania, a co jest określane jako operacja na skali, możemy zapewnić niezawodną manipulację dzieckiemView
.Tutaj pokazuję przykład użycia:
źródło
Zmieniono nieco rozwiązanie dostarczone przez @Vyacheslav Shylkin w celu usunięcia zależności wszelkich ręcznie wprowadzanych liczb.
źródło
W tym przykładzie możesz przesuwać widok w jego granicach nadrzędnych bez względu na jego rozmiar, bezbłędną animację i łapanie kliknięć.
Powodem, dla którego to rozwiązanie jest lepsze od innych komentarzy, jest to, że to podejście wykorzystuje Directional Pad, który sam się oblicza i nie będzie opierał się na pozycjach widoku, co jest źródłem wielu błędów.
Jeśli masz kontener wewnątrz ScrollView lub dwuwymiarowego ScrollView, powinieneś dodać tę linię do onTouch
źródło
Tak samo jak odpowiedź @ Alexa Karshina , trochę się zmieniam.
źródło