2014-09-14 2 views
1

У меня возникли проблемы с попыткой настроить пользовательскую анимацию на транзакцию фрагмента. Я знаю, что на этом есть несколько ступеней, и я пробовал все их решения, и я все еще не могу заставить это работать. Вот анимация XML файлы:Проблема с анимацией анимации фрагментации

slide.down.xml (для выхода)

<set xmlns:android="”http://schemas.android.com/apk/res/android”" 
android:shareInterpolator="false" > 

<translate 
    android:duration="700" 
    android:fromXDelta="0%" 
    android:fromYDelta="-100%" 
    android:toXDelta="0%" 
    android:toYDelta="0%" /> 

slide_up.xml (для ввода)

<set xmlns:android="”http://schemas.android.com/apk/res/android”" 
android:shareInterpolator="false" > 

<translate 
    android:duration="700" 
    android:fromXDelta="0%" 
    android:fromYDelta="0%" 
    android:toXDelta="0%" 
    android:toYDelta="-100%"/>  

и код фрагмента фрагмента:

getFragmentManager().beginTransaction() 
          .setCustomAnimations(R.anim.slide_up , R.anim.slide_down,R.anim.slide_up , R.anim.slide_down) 
          .replace(R.id.container, list) 
          .addToBackStack(null) 
          .commitAllowingStateLoss(); 

Все решения образуют другие подобные темы, я попытался:

  • Убедился setCustomAnimations находится перед replace
  • Установили android:hardwareAccelerated истина в манифесте.
  • удостоверились анимации не отключены в настройках разработчика на моем тестовом устройстве

Я, кажется, Мессинг что-то совершенно очевидно, и важно, но я не могу понять, что это такое.

Мой вопрос: Почему моя анимация костюма не работает и как я могу заставить ее работать?

+0

Вам не нужно использовать Аниматоры, а не Анимации? – pskink

+0

Я тебя не понимаю, ты говоришь, что я не должен использовать setCustomAnimations? Почему нет ? – DrkStr

+0

нет, я говорю, что вы должны использовать objectAnimator в вашем xml-файле – pskink

ответ

4

Итак, в Android есть два типа анимаций. Просмотр Анимация (Animation) и Недвижимость Анимация (Animator). Ваша анимация первая, а FragmentTransaction.setCustomAnimations ожидает последнего. У вас есть 2 возможности исправить это:

  1. Используйте библиотеку поддержки.
    • Подкласс android.support.v4.app.Fragment
    • Использование getSupportFragmentManager() для создания FragmentTransaction
  2. Использование Аниматоры
    • Создание пользовательского родителя ViewGroup (объяснил here)
    • Создание objectAnimator (XML)

Первый вариант, безусловно, более простой, особенно если вы собираетесь использовать трансляцию вкл/выкл, и он ожидает, какие типы анимаций вы уже определили.

Чтобы узнать больше о различии между двумя анимациями, см. here.

+0

, объявление 2) вам нужно только иметь аниматор: либо определенный в xml, либо возвращенный Fragment.onCreateAnimator() – pskink

+0

@pskink Если вы хотите перевести экран просмотра вкл/выкл, например, он делает выше, вы должны создать пользовательский родитель с 'Animator'. –

+0

ok, я пропустил «-100%», поэтому в этом случае статического xml-файла недостаточно, но все же вы можете переопределить onCreateAnimatior без настраиваемого корня ViewGrnoup – pskink

Смежные вопросы