Возможно ли сделать анимацию перехода при изменении представлений в одной и той же деятельности?

Предположим, у меня есть 2 файла XML, и моя активность будет setContentView соответствующей, основанной на некотором нажатии кнопки от пользователя. Можно ли изменить анимацию перехода для изменения представления контента?

Пока я вижу super.overridePendingTransition(), который подходит для запуска новых действий, однако мой пример не запускает новую активность, он просто меняет макет в текущем.

3 ответа

Матиас Лин объяснил это очень хорошо.

Вы всегда можете использовать анимацию по умолчанию, поставляемую платформой Android.

Вот пример кода:

boolean isFirstXml=evaluatingConditionFunction();
LayoutInflater inflator=getLayoutInflater();
View view=inflator.inflate(isFirstXml?R.layout.myfirstxml:R.layout.myseconxml, null, false);
view.startAnimation(AnimationUtils.loadAnimation(this, android.R.anim.slide_out_right));
setContentView(view);

Вызовите это из любой из ваших действий, которая содержит ваш родительский просмотр.

Для пользовательских анимаций вы можете посетить документы разработчика. Heres документация.


Да, вы можете применить анимацию практически для любого вида, которое вам нравится. Просто через view.startAnimation(animation);

Возьмите внешнюю группу просмотра вашего соответствующего макета (просмотр содержимого) и примените к нему анимацию. В зависимости от того, какую анимацию вы хотите сделать, может иметь смысл раздуть/загрузить оба макета, но скрыть один из них, а затем поменять местами. Укажите, какой переход вы имеете в виду.

Например: если вы выполняете альфа-переход, вы будете запускать alphaAnimation в текущем макете, когда когда анимация заканчивается (AnimationListener), вы устанавливаете представление контента в новый макет и затухаете содержимое обратно, через другая alphaAnimation.


Лучшее решение использует ViewFlipper: это FrameLayout, который может выполнять анимацию при изменении представлений.

<viewflipper android:id="@+id/[your_id_here]" android:inanimation="..." android:outanimation="..." android:layout_width="fill_parent" android:layout_height="fill_parent">
 <relativelayout <!--your="" first="" layout="" --="">
 </relativelayout>
 <relativelayout <!--your="" second="" layout="" --="">
 </relativelayout>
</viewflipper>

Затем переключите представления с помощью setDisplayedChild(int) или showNext() или showPrevious. Если вы хотите иметь другую анимацию для движения слева и справа, вам необходимо установить inAnimation и outAnimation в коде перед переходом.

Более полный пример здесь.

licensed under cc by-sa 3.0 with attribution.