Возможно ли сделать анимацию перехода при изменении представлений в одной и той же деятельности?
Предположим, у меня есть 2 файла XML, и моя активность будет setContentView соответствующей, основанной на некотором нажатии кнопки от пользователя. Можно ли изменить анимацию перехода для изменения представления контента?
Пока я вижу super.overridePendingTransition(), который подходит для запуска новых действий, однако мой пример не запускает новую активность, он просто меняет макет в текущем.
Ответы
Ответ 1
Матиас Лин объяснил это очень хорошо.
Вы всегда можете использовать анимацию по умолчанию, поставляемую платформой 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 документация.
Ответ 2
Да, вы можете применить анимацию практически для любого вида, которое вам нравится. Просто через view.startAnimation(animation);
Возьмите внешнюю группу просмотра вашего соответствующего макета (просмотр содержимого) и примените к нему анимацию. В зависимости от того, какую анимацию вы хотите сделать, может иметь смысл раздуть/загрузить оба макета, но скрыть один из них, а затем поменять местами. Укажите, какой переход вы имеете в виду.
Например: если вы выполняете альфа-переход, вы будете запускать alphaAnimation в текущем макете, когда когда анимация заканчивается (AnimationListener), вы устанавливаете представление контента в новый макет и затухаете содержимое обратно, через другая alphaAnimation.
Ответ 3
Лучшее решение использует 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
в коде перед переходом.
Более полный пример здесь.