Animacja związana z ruchem polega na działaniu na siłę tarcia, która jest proporcjonalna do z prędkością obiektu. Użyj go, aby animować właściwość obiektu i stopniowo zakończyć animację. Ma on początkową prędkość, która jest w większości pobierana z prędkości gestu i stopniowo zwalnia. Animacja kończy się, gdy jej prędkość jest na tyle niska, że nie powoduje żadnych widocznych zmian na ekranie urządzenia.

Aby dowiedzieć się więcej o powiązanych tematach, przeczytaj te przewodniki:
Dodawanie biblioteki AndroidaX
Aby korzystać z animacji opartych na fizyce, musisz dodać do projektu bibliotekę AndroidaX w następujący sposób:
- Otwórz plik
build.gradle
dla modułu aplikacji. - Dodaj bibliotekę AndroidaX do sekcji
dependencies
.Groovy
dependencies { implementation 'androidx.dynamicanimation:dynamicanimation:1.0.0' }
Kotlin
dependencies { implementation("androidx.dynamicanimation:dynamicanimation:1.0.0") }
Tworzenie animacji przesunięcia
Klasa FlingAnimation
umożliwia tworzenie animacji przesunięcia obiektu. Aby utworzyć animację przelotu, utwórz
wystąpienia klasy FlingAnimation
oraz
podaj obiekt i właściwości obiektu, które chcesz animować.
Kotlin
val fling = FlingAnimation(view, DynamicAnimation.SCROLL_X)
Java
FlingAnimation fling = new FlingAnimation(view, DynamicAnimation.SCROLL_X);
Ustaw prędkość
Prędkość początkowa określa szybkość, z jaką właściwość animacji zmienia się na początku animacji. Domyślna prędkość początkowa to 0 pikseli na sekundę. Dlatego musisz określić prędkość początkową, aby animacja nie kończyła się od razu.
Jako prędkości początkowej możesz użyć stałej wartości lub oprzeć ją jest wyższa niż prędkość gestu dotykowego. Jeśli zdecydujesz się podać stałą wartość, określ wartość w dp na sekundę, a następnie przekonwertuj ją na piksele na sekundę. Definiowanie wartości dp na sekundę umożliwia określenie prędkości niezależnie od gęstości i formatu urządzenia. Więcej informacji na temat: do konwersji prędkości początkowej na piksele na sekundę, zapoznaj się z Konwertuję dp na sekundę do pikseli na sekundę w Animacja wiosenna.
Aby ustawić prędkość, wywołaj metodę setStartVelocity()
i przekaż
jej prędkość w pikselach na sekundę. Metoda zwraca obiekt fling, w którym ustawiona jest prędkość.
Uwaga: klasy GestureDetector.OnGestureListener
i VelocityTracker
służą odpowiednio do pobierania i obliczania prędkości gestów dotykowych.
Ustaw zakres wartości animacji
Możesz ustawić minimalne i maksymalne wartości animacji ograniczyć wartość właściwości do określonego zakresu. Ten element sterujący zakresu jest szczególnie przydatne podczas animowania właściwości, które mają zakresu, np. alfa (od 0 do 1).
Uwaga: gdy wartość animacji rzutu osiągnie wartość minimalną lub maksymalną, animacja się zakończy.
Aby ustawić minimalne i maksymalne wartości, wywołaj odpowiednio metody setMinValue()
i setMaxValue()
.
Obie metody zwracają obiekt animacji, dla którego ustawiono wartość.
Ustaw tarcie
Metoda setFriction()
pozwala zmienić tarcie animacji. Określa, jak szybko zmniejsza się prędkość w animacji.
Uwaga: jeśli na początku animacji nie ustawisz wartości tarcia, animacja użyje domyślnej wartości 1.
Metoda zwraca obiekt, którego animacja używa wartości tarcia i udostępniania.
Kod demonstracyjny
Przykład poniżej pokazuje przesuwanie w poziomie. Prędkość przechwycona z
tracker prędkości to velocityX
, a granice przewijania to
ustaw na 0 i
maxPrzewiń. Tarcie jest ustawione na 1,1.
Kotlin
FlingAnimation(view, DynamicAnimation.SCROLL_X).apply { setStartVelocity(-velocityX) setMinValue(0f) setMaxValue(maxScroll) friction = 1.1f start() }
Java
FlingAnimation fling = new FlingAnimation(view, DynamicAnimation.SCROLL_X); fling.setStartVelocity(-velocityX) .setMinValue(0) .setMaxValue(maxScroll) .setFriction(1.1f) .start();
Ustaw minimalną widoczną zmianę
Jeśli animujesz właściwość niestandardową, która nie jest zdefiniowana w pikselach, ustaw minimalną zmianę wartości animacji, która jest widoczna dla użytkowników. Określa ona odpowiedni próg zakończenia animacji.
Nie trzeba wywoływać tej metody podczas animacji
DynamicAnimation.ViewProperty
, ponieważ
minimalna widoczna zmiana jest pobierana z właściwości. Na przykład:
- Domyślna minimalna widoczna wartość zmiany to 1 piksel w przypadku właściwości widoku, takich jak
TRANSLATION_X
,TRANSLATION_Y
,TRANSLATION_Z
,SCROLL_X
iSCROLL_Y
. - W przypadku animacji korzystających z obrotu, np.
ROTATION
,ROTATION_X
iROTATION_Y
, czyli minimalna widoczność zmiana toMIN_VISIBLE_CHANGE_ROTATION_DEGREES
, czyli 1/10 piksela. - W przypadku animacji używających przezroczystości minimalna widoczna zmiana to
MIN_VISIBLE_CHANGE_ALPHA
, czyli 1/256.
Aby ustawić minimalną widoczną zmianę w animacji, wywołaj metodę setMinimumVisibleChange()
i przekaż jedną z konstant minimalnej widocznej zmiany lub wartość, którą musisz obliczyć dla właściwości niestandardowej. Więcej informacji o obliczaniu tej wartości znajdziesz w sekcji Obliczanie minimalnej wartości widocznej zmiany.
Kotlin
anim.minimumVisibleChange = DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE
Java
anim.setMinimumVisibleChange(DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE);
Uwaga: wartość musisz przekazać tylko wtedy, gdy animujesz właściwość niestandardową, która nie jest określona w pikselach.
Obliczanie minimalnej wartości widocznej zmiany
Aby obliczyć minimalną widoczną wartość zmiany dla właściwości niestandardowej, użyj funkcji następujący wzór:
Minimalna widoczna zmiana = zakres wartości właściwości niestandardowej / zakres animacja w pikselach
Na przykład właściwość, którą chcesz animować, zmienia się od 0 do 100. Odpowiada to zmianie o 200 pikseli. Zgodnie z formułą minimalna widoczna wartość zmiany to 100 / 200 = 0,5 piksela.