Я использую последнюю версию библиотеки поддержки, чтобы разрешить использование фрагментов на устройствах с версиями Android ‹ 3.0. Каждый раз, когда я хочу переключить текущий фрагмент, я делаю это, используя этот код:
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) анимация ОЧЕНЬ быстрая, иногда настолько быстрая, что вы ее даже не видите
Исходя из этого, кажется, что продолжительность на самом деле не измеряется в мс, а зависит от скорости процессора. Кто-нибудь еще замечал подобные результаты? Есть ли способ настроить его так, чтобы скорость анимации была одинаковой на всех устройствах, как и следовало ожидать после прочтения документации?