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

Мультиплексирование карты между действиями

Как сделать Карт-флип Анимация между действиями

http://developer.android.com/training/animation/cardflip.html

Вышеупомянутая ссылка Переключение между статическими макетами.. Я хочу сделать CardFlip Между двумя действиями, имеющими динамический макет. Спасибо в Advance..:)

У меня есть два действия...

  • A Main_Activity, который содержит сведения о продукте (Say Galaxy s3)
  • A Search_Activity, который запрашивает запрос на поиск пользователей.

В Main_Activity есть кнопка поиска. Когда вы нажимаете кнопку, в представлении Main_Activity должна отображаться карта на Search_Activity. Аналогично, как только пользователь выбирает продукт, он должен Card-Flip наоборот.

Я попытался реализовать, как указано выше в адресе. Но он только переворачивается между двумя статическими макетами, определенными с помощью XML. И я выполняю поиск в ActionBar

4b9b3361

Ответ 1

Из того, что у меня есть, вы не можете сделать точно такую ​​же карточку между действиями.
НО,
как вы уже знаете, вам нужно overridePendingTransition(), чтобы анимировать переход между действиями (doc здесь). Теперь все, что вам нужно, это ресурс анимации, чтобы сделать трюк. Я использовал их:
fade_in.xml

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" >
<scale
    android:duration="200"
    android:fromXScale="0.0"
    android:fromYScale="1.0"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:pivotX="50%"
    android:pivotY="50%"
    android:startOffset="200"
    android:toXScale="1.0"
    android:toYScale="1.0" />

<alpha
    android:duration="1"
    android:fromAlpha="0.0"
    android:startOffset="200"
    android:toAlpha="1.0" />
</set>

fade_out.xml

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" >
<scale
    android:duration="200"
    android:fromXScale="1.0"
    android:fromYScale="1.0"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toXScale="0.0"
    android:toYScale="1.0" />

<alpha
    android:duration="1"
    android:fromAlpha="1.0"
    android:startOffset="200"
    android:toAlpha="0.0" />
</set>

Обратите внимание, что анимация поворота вращается только вокруг оси Z (той, что идет на экран) в заданной позиции поворота (координаты x, y), поэтому вы не можете использовать ее, чтобы перевернуть ось Y.
Я сделал это, чтобы масштабировать ширину вокруг середины, сохраняя высоту, которая создает иллюзию активности, действующей на нее. Кроме того, входящие и выходящие действия исчезают и выходят соответственно, когда ширина равна 0, поэтому похоже, что они переключаются. Атрибут duration scale флип в анимации должен быть таким же, как и весь атрибут startOffset для обеих анимаций.
Не идеально, но помогло.
Надеюсь, что это поможет.

Ответ 2

Невозможно сделать анимацию с переводом карты между действиями так же просто, как указано в принятом ответе (который просто расширяет новую активность от середины экрана до сторон).

Причиной этого является то, что при вызове overridePendingTransition() вы просто применяете анимацию к запущенной операции, а не к той, которая в настоящее время открыта.

В (очень хорошем) учебнике, к которому привязано, всего 4 анимации, что составляет 2 анимации за переход (один для фрагмента, который входит в экран, и один для фрагмента, выходящего на экран).

Вот как я решил эту проблему и сделал анимацию флип-карты между моими 2 действиями, но она очень обычна для содержания моих действий. В каком-то контексте мое первое действие содержит полноэкранное изображение, и я просто хотел, чтобы это изображение было перевернуто на другой вид того же размера.

  • Отключить автоматическую анимацию окна, вызывая overridePendingTransition(0, 0)
  • В комплекте со вторым действием передайте достаточно информации для новой активности, чтобы воссоздать представление (для меня это был размер и положение изображения и ресурс для загрузки).
  • Настройте onPreDrawListener на новом представлении, в котором вы заново создаете представление своей родительской активности (изображение в моем случае)
  • Вам просто нужно перевернуть 2 вида. Для этого я переписал код, который был в учебнике по переходу на фрагмент флип-карты, который вы опубликовали, и переписал его в коде с помощью ObjectAnimator s.
  • Переопределите метод onBackPressed() для запуска той же анимации в обратном порядке

С помощью этого механизма вы можете выполнять абсолютно любой настраиваемый переход, поскольку вы просто анимации между представлениями. Вот еще информация об этом методе: https://www.youtube.com/watch?v=ihzZrS69i_s#t=1001