Страницы

Поиск по вопросам

понедельник, 6 января 2020 г.

Простая анимация фрагментов

#android #анимация


Пытаюсь задать простую анимацию смены фрагментов. При помещении xml - файлов анимации
в папку /anim/ выдает исключение:

Caused by: java.lang.RuntimeException: Unknown animation name: objectAnimator


Если же поместить файлы анимации в папку /animator/, то метод setCustomAnimation()
ругается и говорит что необходим ресурс анимации из папки /anim/. Подскажите, как же
все таки нужно сделать, чтобы это работало.

Файл R.anim.slide_in_left.xml:

    

    



Файл R.anim.slide_in_right.xml:



    

    



Файл mainActivity.java:

import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity
{
    Fragment1 f1;
    Fragment2 f2;
    FragmentTransaction fm;

    @Override
    protected void onCreate( Bundle savedInstanceState )
    {
        super.onCreate( savedInstanceState );
        setContentView( R.layout.activity_main );

        f1 = new Fragment1();
        f2 = new Fragment2();
        fm = getSupportFragmentManager().beginTransaction();
        fm.setCustomAnimations( R.anim.slide_in_left, R.anim.slide_in_right );
        fm.replace( R.id.fragCont, f1 );
        fm.addToBackStack( null );
        fm.commit();

        Button btn = ( Button ) findViewById( R.id.btn );
        btn.setOnClickListener( new View.OnClickListener()
        {
            @Override
            public void onClick( View v )
            {
                fm = getSupportFragmentManager().beginTransaction();
                fm.setCustomAnimations( R.anim.slide_in_left, R.anim.slide_in_right );
                if ( f1.isVisible() )
                {
                    fm.replace( R.id.fragCont, f2 );
                } else
                {
                    fm.replace( R.id.fragCont, f1 );
                }
                fm.commit();
            }
        } );
    }
}

    


Ответы

Ответ 1



Судя по всему, FragmentTransaction из библиотеки поддержки ( android.support.v4.app.FragmentTransaction ) работают только с ресурсами из каталога anim, начиная с версии Android 3.1 XML ресурсы анимации должны размещаться в каталоге animator, с которыми не работает android.support.v4.app.FragmentTransaction. Для работы с этими ресурсами необходимо использовать стандартный android.app.FragmentTransaction. Поменял классы фрагментов на android.app.* и все заработало.

Комментариев нет:

Отправить комментарий