web-dev-qa-db-fra.com

Animation 3D Flip sur Android.support.v4.Fragment

Je suis en train de lire ce tutoriel:

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

sur retourner les animations de fragments . Malheureusement, le object-animator est uniquement disponible pour Android.app.Fragment, et non le fragment support.

J'ai essayé de reconstruire les animations .xml en utilisant des animations d'échelle et de rotation. Mais maintenant, les animations ne sont tout simplement pas exécutées. au lieu de retourner.

  • Ai-je simplement commis une erreur dans l'implémentation des animations .xml? 
  • Ou n'est-il pas possible de faire une animation de retournement 3D sans objet-animateur?
  • Ou n'est-il pas possible de faire une animation 3D avec le support Fragment?

Voici mes animations .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>

Et voici le code où ils sont exécutés:

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();
21
Philipp Jahoda

Vous pouvez utiliser NineOldAndroids . Il supporte l'API d'animation Honeycomb (Android 3.0) jusqu'à Android 1.0. Vous obtiendrez ObjectAnimator, ValueAnimator et tous les autres bons trucs.

3
Anup Cowkur

Merci à tous pour votre aide.

J'ai réussi à résoudre mon problème. La solution concerne NineOldAndroids et une autre bibliothèque avec support-v4 de NineOldAndroids.

Ce que j'ai fait:

  • J'ai téléchargé cette bibliothèque: https://github.com/kedzie/Support_v4_NineOldAndroids (Il s'agit d'une bibliothèque de support pour NineOldAndroids)
  • Importé dans mon espace de travail
  • Téléchargement de la bibliothèque NineOldAndroids et importation dans mon espace de travail
  • Importé la bibliothèque NineOldAndroids dans la bibliothèque support-v4
  • Importation de la bibliothèque support-v4-nineoldandroids dans mon projet
  • Est-ce que le Filp-Animation
2
Philipp Jahoda

Au cas où vous ne soutenez pas ci-dessous api <3

utilisez le même code que celui indiqué dans: https://stuff.mit.edu/afs/sipb/project/Android/docs/training/animation/cardflip.html

vient d’ajuster la méthode flipCard pour:

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();
}
0
ReeSen