Android FragmentTransaction Custom Animation (Неизвестное имя аниматора: Перевести)

Я пытаюсь настроить пользовательскую анимацию для работы с моим фрагментом.

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

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();
}

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

Спасибо

Ответ 1

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

аниматор/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;

        }

Ответ 2

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

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

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

Ответ 3

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