Справа - задержка на обоих уровнях. Когда вы запускаете Animator в контексте LayoutTransition, вы хотите установить продолжительность и startDelay для объекта LayoutTransition, а не для базового Animator (поскольку объект перехода будет предоставлять свои собственные значения для этих свойств аниматорам, которые он работает).
Причина этого в том, что LayoutTransition обычно представляет собой последовательность анимаций, которые запускаются на объектах внутри контейнера. Так, например, если вы хотите, чтобы объект «появлялся» в контейнере, тогда переход сначала оживит другие объекты, а затем оживит новый объект на месте. Представьте себе, что вы добавляете элемент в середину набора объектов (как в случае, который вы видите в приложениях ApiDemos); сначала он создает пространство, а затем затухает в объекте.
В случае исходного кода, приведенного выше, вы хотите, чтобы появляющаяся анимация запускалась немедленно, поэтому вы должны установить для перехода startDelay для APPEARING значение 0 (как вы делали в ответе выше).
В противном случае анимации DISAPPEARING по умолчанию не имеют startDelay, но анимации CHANGE_DISAPPEARING имеют startDelay, равный длительности анимации DISAPPEARING, в предположении, что сначала вы хотите удалить элемент, а затем анимировать другие элементы в контейнер на свои новые места.
Поскольку эти предположения не обязательно применимы к каждой ситуации, в LayoutTransition есть свойства duration / startDelay для управления поведением в соответствии с тем, как оно должно работать в ваших конкретных случаях.
Обратите также внимание, что если вы не хотите запускать один из типов анимации, вам следует установить для этой анимации значение null (см. Документацию для LayoutTransition.setAnimator (int, Animator)). Установка его в ваш dummyAnimator не будет иметь тот же эффект. Во-первых, значения длительности / startDelay по умолчанию в LayoutTransition будут по-прежнему применяться, даже если для этих анимаций вы предоставляете пользовательские аниматоры.
Что еще нужно знать: базовый механизм синхронизации (для Android, а также для большинства других платформ, над которыми я когда-либо работал) будет иметь некоторое минимальное разрешение. Таким образом, вы устанавливаете длительность '1', что может не привести к тому, что анимация заканчивается 1 мс. Вместо этого он будет работать в течение одного кадра, затем в следующем кадре (как правило, частота обновления устройства в приложении с хорошим поведением, если система не зависает) он увидит, что анимация должна завершиться.