Пытаюсь задать простую анимацию смены фрагментов. При помещении 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();
}
} );
}
}
Ответ
Судя по всему, FragmentTransaction из библиотеки поддержки ( android.support.v4.app.FragmentTransaction ) работают только с ресурсами из каталога anim, начиная с версии Android 3.1 XML ресурсы анимации должны размещаться в каталоге animator, с которыми не работает android.support.v4.app.FragmentTransaction. Для работы с этими ресурсами необходимо использовать стандартный android.app.FragmentTransaction. Поменял классы фрагментов на android.app.* и все заработало.
Комментариев нет:
Отправить комментарий