Я начал проверять переходы с TransitionManager и Scenes. То, что я пытаюсь сделать, состоит в том, чтобы иметь 3 произвольных, совершенно несвязанных макета и просто полностью их выцветать, а затем исчезать (не перекрестно, просто последовательно исчезать и исчезать). Итак, сцены: A-> B-> C. А предварительно добавлен в макет действия с тегом include.Переходы Fade не работают должным образом
Что происходит:
- Сцена угасает;
- Сцена B исчезает;
- Сцена B исчезает, не выцветая; (НЕПРАВИЛЬНОЕ ПОВЕДЕНИЕ)
- Сцена C исчезает;
Мои прошлые переживания с переходами общих элементов заставляют меня поверить, что все это касается макетов и правильного таргетинга. Поскольку это не общий элемент, а целые сцены, я хотел бы настроить таргетинг на все элементы макета независимо от того, что они собой представляют и каковы их идентификаторы. В любом случае ниже приведен полный список всех соответствующих кода и XML.
Метод, вызываемый для запуска последовательности:
@OnClick(R.id.transition_start)
protected void playSceneB(Button b) {
final Scene scene_b = Scene.getSceneForLayout(mSceneContainer, R.layout.scene_b, this);
final Transition transition = TransitionInflater.from(this)
.inflateTransition(R.transition.transition);
transition.addListener(mTransitionListener);
TransitionManager.go(scene_b, transition);
}
Слушатель:
private Transition.TransitionListener mTransitionListener = new EndTransitionListener() {
@Override
public void onTransitionEnd(Transition transition) {
playSceneC();
}
@Override
public void onTransitionCancel(Transition transition) {
playSceneC();
}
};
Способ запуска Сцена C
private void playSceneC() {
final Scene scene_c = Scene.getSceneForLayout(mSceneContainer, R.layout.scene_c, this);
final Transition transition = TransitionInflater.from(this)
.inflateTransition(R.transition.transition);
TransitionManager.go(scene_c, transition);
}
перехода (такой же как для изменений сцены):
<?xml version="1.0" encoding="utf-8"?>
<transitionSet
xmlns:android="http://schemas.android.com/apk/res/android"
android:startDelay="4000"
android:transitionOrdering="sequential">
<fade
android:duration="2000"
android:fadingMode="fade_out"/>
<fade
android:duration="2000"
android:fadingMode="fade_in"/>
</transitionSet>
и макеты (макет А и В такие же, они просто имеют другую строку набора на TextView):
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout android:id="@+id/container"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/background"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/hello"/>
</FrameLayout>
</FrameLayout>
Layout C:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout android:id="@+id/container"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/background"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<ImageView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:src="@mipmap/ic_launcher"/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:text="@string/hello3"/>
</LinearLayout>
</FrameLayout>
</FrameLayout>
Примечание. Я ожидаю, что он будет работать над KitKat.
Редактировать: Я попытался сделать это с помощью AutoTransition, как из XML, так и из кода, и это не сработало. Также попробовал называть его TransitionManager.beginDelayedTransition с ручным вызовом Scene.enter(), и он по-прежнему ведет себя одинаково.
Редактировать 2: Я добавил слушателя к обоим переходам к лог-обратным вызовам.
- 07-31 09: 18: 57,490 4744-4744/com.test.transition Д/TransitionActivity: onTransitionStart
- 07-31 09: 19: 01,520 4744-4744/com.test.transition Д/TransitionActivity: onTransitionEnd
- 07-31 09: 19: 01.520 4744-4744/com.test.transition D/TransitionActivity: onTransitionPause
- 07-31 09: 19: 01.520 4744-4744/com.test. переход D/TransitionActivity: начало второго перехода
- 07-31 09: 19: 03.530 4744-4744/com.test.переход D/TransitionActivity: 2-й конец перехода
Обратите внимание на тайминги. Сначала заканчивается через 4 с. 2-й конец через 2 секунды после старта (просто затухание, исчезновение было провалено)
Благодарим вас за ввод. Вы правы, что это намного чище, но это не решает проблему. – mhenryk
Я отредактировал образцы кода, чтобы показать текущее состояние. – mhenryk