Страницы

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

среда, 13 февраля 2019 г.

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

Пытаюсь задать простую анимацию смены фрагментов. При помещении 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.* и все заработало.

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

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