Używam RotateAnimation
do obracania obrazu, którego używam jako niestandardowej cyklicznej tarczy w systemie Android. Oto mój plik rotate_indefinitely.xml
, które umieściłem w res/anim/
:Jak uzyskać płynne obracanie obrazu w systemie Android?
<?xml version="1.0" encoding="UTF-8"?>
<rotate
xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="infinite"
android:duration="1200" />
Kiedy stosuje się to do mojego ImageView
użyciu AndroidUtils.loadAnimation()
, działa świetnie!
spinner.startAnimation(
AnimationUtils.loadAnimation(activity, R.anim.rotate_indefinitely));
Problem polega na tym, że obrót obrazu wydaje się być zatrzymany u góry każdego cyklu.
Innymi słowy, obraz obraca się o 360 stopni, na krótko zatrzymuje, a następnie ponownie obraca się o 360 stopni, itp
Podejrzewam, że problemem jest to, że animacja jest za pomocą domyślnej interpolator jak android:iterpolator="@android:anim/accelerate_interpolator"
(AccelerateInterpolator
), ale Nie wiem, jak powiedzieć, żeby nie interpolować animacji.
Jak wyłączyć interpolację (jeśli to rzeczywiście jest problem), aby cykl animacji był płynny?
Dzieje się tak, ponieważ interpolator został napisany nieprawidłowo (bez "n"). Nie musisz tworzyć własnego – Kingpin
Wypróbowałem każdy dostępny interpolator, w tym liniowy, i wciąż otrzymuję ten mały "zaczep" na początku każdego cyklu. –
Jeśli animacja obracania znajduje się wewnątrz zestawu, ustawienie interpolatora nie działa. Wykonanie obrotu elementu górnego naprawia go – shalafi