Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 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 в коде перед переходом.

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