У меня есть действие, которое по умолчанию загружено Fragment StatsDetailFragment.Reveal Transition for replace Fragment
При нажатии кнопки я заменяю фрагмент другим, используя следующий код.
getSupportFragmentManager().beginTransaction()
.replace(R.id.stats_detail_container, projectEntryListFragment, ProjectEntryListFragment.FRAGMENT_ID)
.addToBackStack(FRAGMENT_CHART)
.commit();
Я настройке Enter Переход на ProjectEntryListFragment с помощью пользовательского класса перехода
public class RevealTransition extends Visibility {
private final Point mEpicenter;
private final int mSmallRadius;
private final int mBigRadius;
private final long mDuration;
public RevealTransition(Point epicenter, int smallRadius, int bigRadius, long duration) {
mEpicenter = epicenter;
mSmallRadius = smallRadius;
mBigRadius = bigRadius;
mDuration = duration;
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public Animator onAppear(ViewGroup sceneRoot, View view, TransitionValues startValues, TransitionValues endValues) {
Animator animator = ViewAnimationUtils.createCircularReveal(view, mEpicenter.x, mEpicenter.y,
mSmallRadius, mBigRadius);
animator.setDuration(mDuration);
return new WrapperAnimator(animator);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public Animator onDisappear(ViewGroup sceneRoot, View view, TransitionValues startValues, TransitionValues endValues) {
Animator animator = ViewAnimationUtils.createCircularReveal(view, mEpicenter.x, mEpicenter.y,
mBigRadius, mSmallRadius);
animator.setDuration(mDuration);
return new WrapperAnimator(animator);
}
}
Переход работает хорошо. Но проблема, с которой я сталкиваюсь, заключается в том, что когда анимация раскрытия выполняется в ProjectEntryListFragment, StatsDetailFragment уже удаляется, и это приводит к тому, что анимация раскрытия воспроизводится поверх чистого фона. Я бы предпочел, чтобы это было воспроизведено над StatsDetailFragment так, чтобы StatsDetailFragment был виден, поскольку переход на показ воспроизводится в ProjectListFragment.
Я попробовал просто добавить новый фрагмент, но это просто дает мне ошибку при появлении backstack.
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.support.v4.app.Fragment.getAllowReturnTransitionOverlap()' on a null object reference
Любая помощь будет чрезвычайно оценена.
Я не использую анимацию, но переход. Но, тем не менее, я попытался установить TransitionListeners. Но, похоже, это не работает. Также не работает ViewTreeObserver .. :( –
У меня была такая же проблема. Вот почему я сделал небольшой визуальный трюк на фрагменте после завершения перехода. Он имеет тот же визуальный эффект. Запустите этот код, как это, в вашем представлении oncreateview. . getViewTreeObserver() addOnGlobalLayoutListener (новый ViewTreeObserver.OnGlobalLayoutListener() { @Override общественного недействительными onGlobalLayout() { раскрыть(); ViewUtils.removeGlobalListeners (во-первых, это); } }); – locomain
Итак, вы реализовали раскрытие как анимацию? метод в коде, я полагаю? –