Мультиплексирование карты между действиями
Как сделать Карт-флип Анимация между действиями
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
Ответы
Ответ 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