Я использую последнюю версию библиотеки поддержки, чтобы разрешить использование фрагментов на устройствах под управлением версий Android <3.0. Каждый раз, когда я хочу переключить текущий фрагмент, я делаю это, используя этот код: </p>
public void displayFragmentInMainView(Fragment f) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left,
android.R.anim.slide_in_left, android.R.anim.slide_out_right);
transaction.replace(R.id.fragment_holder, f);
transaction.commit();
}
Вот XML, который определяет одну из анимаций перехода:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="-50%p" android:toXDelta="0"
android:duration="500"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="500" />
</set>
Как видно из приведенного выше XML, длительность анимации установлена на 500. Согласно документам для разработчиков, указанные здесь единицы измерения указаны в мс (мера времени).
Я заметил во время тестирования, что продолжительность анимации у разных устройств различна. Почему это так, если я указываю значение мс для продолжительности?
Вот устройства, на которых я тестировал, и результаты (субъективные):
HTC Legend : (бюджетный телефон с медленным процессором, Android 2.3.3) анимация плавная и длится ровно столько, сколько мне бы хотелось.
Samsung Galaxy S : (центральный процессор, Android 2.1) анимация несколько прерывистая и идет быстрее, чем на Legend
Эмулятор : (работает на четырехъядерном iMac, Android 4.0) анимация ОЧЕНЬ быстрая, иногда такая быстрая, что вы даже не видите ее
Исходя из этого, кажется, что продолжительность действительно не измеряется в мс, но зависит от скорости процессора. Кто-нибудь еще заметил подобные результаты? Есть ли способ настроить его так, чтобы скорость анимации была одинаковой на всех устройствах, как и следовало ожидать после чтения документов?