2016-07-31 3 views
1

Я начал проверять переходы с 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 секунды после старта (просто затухание, исчезновение было провалено)

ответ

2

Публикация этого потенциального зрителя может иметь намек в будущем.

У меня это работает. Когда я удалил все идентификаторы из групп корневого представления (те, у которых id = container), он начал работать. Очевидно, что переходная схема игнорировала затухание дочерних элементов этого макета в данном конкретном случае.

Идентичные идентификаторы также работают.

0

Могу я предложить использовать Transition.setStartDelay() вместо handler.postDelayed();

+0

Благодарим вас за ввод. Вы правы, что это намного чище, но это не решает проблему. – mhenryk

+0

Я отредактировал образцы кода, чтобы показать текущее состояние. – mhenryk

Смежные вопросы