3D Flip Анимация на android.support.v4.Fragment
В настоящее время я читаю этот урок:
http://developer.android.com/training/animation/cardflip.html
на флип анимации фрагментов. К сожалению, объект-аниматор доступен только для android.app.Fragment, а не для поддержки Fragment.
Я попытался восстановить.xml-анимацию, используя анимацию масштабирования и поворота. Но теперь анимация просто не выполняется, и после того времени, которое я установил в файле.xml анимации, проходит другой Фрагмент вместо переворачивания.
- Я просто ошибся в реализации анимации.xml?
- Или невозможно сделать 3D анимацию без объекта-аниматора?
- Или же невозможно сделать 3D-анимацию с поддержкой Fragment?
Вот мои.xml анимации: flip_left_in.xml
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- Before rotating, immediately set the alpha to 0. -->
<alpha
android:valueFrom="1.0"
android:valueTo="0.0"
android:propertyName="alpha"
android:duration="0" />
<!-- Rotate. -->
<rotate
android:valueFrom="-180"
android:valueTo="0"
android:propertyName="rotationY"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:duration="800"/>
<!-- Half-way through the rotation (see startOffset), set the alpha to 1. -->
<alpha
android:valueFrom="0.0"
android:valueTo="1.0"
android:startOffset="400"
android:duration="1" />
</set>
flip_left_out.xml
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- Rotate. -->
<rotate
android:duration="800"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:propertyName="rotationY"
android:valueFrom="0"
android:valueTo="180" />
<!-- Half-way through the rotation (see startOffset), set the alpha to 0. -->
<alpha
android:duration="1"
android:propertyName="alpha"
android:startOffset="400"
android:valueFrom="1.0"
android:valueTo="0.0" />
</set>
flip_right_in.xml
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- Before rotating, immediately set the alpha to 0. -->
<alpha
android:duration="0"
android:propertyName="alpha"
android:valueFrom="1.0"
android:valueTo="0.0" />
<!-- Rotate. -->
<rotate
android:duration="800"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:propertyName="rotationY"
android:valueFrom="180"
android:valueTo="0" />
<!-- Half-way through the rotation (see startOffset), set the alpha to 1. -->
<alpha
android:duration="1"
android:propertyName="alpha"
android:startOffset="400"
android:valueFrom="0.0"
android:valueTo="1.0" />
</set>
flip_right_out.xml
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- Rotate. -->
<rotate
android:duration="800"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:propertyName="rotationY"
android:valueFrom="0"
android:valueTo="-180" />
<!-- Half-way through the rotation (see startOffset), set the alpha to 0. -->
<alpha
android:duration="1"
android:propertyName="alpha"
android:startOffset="400"
android:valueFrom="1.0"
android:valueTo="0.0" />
</set>
И вот код, где они выполняются:
FragmentTransaction trans = getActivity().getSupportFragmentManager().beginTransaction();
trans.setCustomAnimations(R.anim.flip_right_in, R.anim.flip_right_out,
R.anim.flip_left_in, R.anim.flip_left_out);
trans.addToBackStack(null);
trans.replace(R.id.content_frame, new MyFragment()).commit();
3 ответа
Вы можете использовать NineOldAndroids. Он поддерживает API анимации Honeycomb (Android 3.0) вплоть до Android 1.0. Вы получите ObjectAnimator, ValueAnimator и все другие хорошие вещи.
Спасибо за вашу помощь.
Мне удалось решить мою проблему. Решение связано с NineOldAndroids и другой библиотекой с поддержкой support-v4 для NineOldAndroids.
Что я сделал:
- Я скачал эту библиотеку: https://github.com/kedzie/Support_v4_NineOldAndroids (это библиотека поддержки для NineOldAndroids)
- Импортировал его в мое рабочее пространство
- Загрузил библиотеку NineOldAndroids и импортировал ее в мое рабочее пространство
- Импортировал библиотеку NineOldAndroids в библиотеку support-v4
- Импортировал библиотеку support-v4-nineoldandroids в мой проект
- Сделал Filp-анимацию
В случае, если вы не поддерживаете ниже API<3
используйте тот же код, который указан в: https://stuff.mit.edu/afs/sipb/project/android/docs/training/animation/cardflip.html
просто настроил метод flipCard, чтобы:
private void flipCard() {
if (mShowingBack) {
mShowingBack = false;
FragmentTransaction trans = getActivity().getFragmentManager().beginTransaction();
trans.setCustomAnimations(R.animator.card_flip_right_in,
R.animator.card_flip_right_out,
R.animator.card_flip_left_in,
R.animator.card_flip_left_out)
.replace(R.id.memberCardContainer, new CardFrontFragment())
.commit();
return;
}
// Flip to the back.
mShowingBack = true;
FragmentTransaction trans = getActivity().getFragmentManager().beginTransaction();
trans.setCustomAnimations(R.animator.card_flip_right_in,
R.animator.card_flip_right_out,
R.animator.card_flip_left_in,
R.animator.card_flip_left_out)
.replace(R.id.memberCardContainer, new CardBackFragment())
.commit();
}