2013-07-20 2 views
61

Я пытаюсь настроить пользовательскую анимацию для работы с моим фрагментом.Android FragmentTransaction Custom Animation (Неизвестно имя аниматора: Translate)

Я следовал за онлайн-уроки, но я получаю ошибку ниже:

java.lang.RuntimeException: Неизвестное имя аниматор: перевод

XML, для анимации ниже:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate 
    android:fromXDelta="100%" 
    android:toXDelta="0" 
    android:duration="300" /> 
</set> 

файл Java будет показано ниже:

public void goCategory(View v) {   
    FragmentTransaction ft = fm.beginTransaction();  
    ft.setCustomAnimations(R.animator.anim_in_left, R.animator.anim_out_left);    
    ft.show(fragment); 
    ft.commit(); 
} 

У меня возникли проблемы с пониманием решений в других потоках. Если кто-то может ошеломить меня, я бы очень признателен.

Благодаря

+0

Если вы используете анимацию с версией библиотеки поддержки Fragment, это может быть вашей проблемой. –

ответ

92

Он не будет работать, вы должны использовать объект аниматора

аниматор/slide_in_left.xml

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" > 

    <objectAnimator 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:duration="500" 
     android:propertyName="x" 
     android:valueFrom="1000" 
     android:valueTo="0" 
     android:valueType="floatType" /> 

</set> 

аниматор/slide_out_right.xml

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" > 

    <objectAnimator 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:duration="500" 
     android:propertyName="x" 
     android:valueFrom="0" 
     android:valueTo="-1000" 
     android:valueType="floatType" /> 

</set> 

Класс Подкатегория

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      // TODO Auto-generated method stub 
      // return super.onCreateView(inflater, container, savedInstanceState); 

      View view = (ViewGroup) inflater.inflate(R.layout.product_frame, null); 
      getFragmentManager().beginTransaction() 
        .replace(R.id.sub_header, new Sub_Header()).commit(); 
      getFragmentManager() 
        .beginTransaction() 
        .setCustomAnimations(R.animator.slide_in_left, 
          R.animator.slide_out_right, 0, 0) 
        .replace(R.id.product_frame, new Sub_Catagory_Grid()).commit(); 

      view.getWidth(); 
      return view; 

     } 
+7

Почему это не работает? можно объяснить? –

+0

В чем проблема, разместите его здесь, я не понимаю ваш вопрос, что означает u, потому что его не работает? –

+2

Он ссылается на ваше заявление о том, что решение OP не будет работать и просит разъяснений. – Tom

106

Возможно, вы смешиваете два apis. Есть два случая:

  • Если нацеливание ниже 3.0 или с использованием фрагментов поддержки v4: Вы должны использовать старую анимацию API, то есть тот, который вы используете (они идут в Anim /, и R.anim.thing)

  • Если вы ориентируетесь выше 3,0 и с использованием собственных фрагментов: вы должны использовать новые анимации APIs, то есть ObjectAnimators (они идут в аниматора/и R.animator.thing).

+1

Не могли бы вы узнать, где в документации говорится, что вам нужно использовать объектные аниматоры для собственных фрагментов? – kmdupr33

+0

Я проверил исходный код обоих Api и обнаружил, что весь анимационный xml должен перейти в папку res/anim, не видел никакого синтаксического анализа для аниматора / –

0

Как @minivac ответил, что вы смешиваете два API. Пожалуйста, взгляните на пример из руководства по обучению Android, чтобы получить дополнительное представление о том, как добавить пользовательскую анимацию для фрагментации транзакций. Это точно решает вашу проблему.

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