Un moyen facile de faire PASSÉ le travail d'animation
J'ai une recherche personnalisée du panneau, qui est une partie de la page principale. La plupart du temps, le panneau est caché. Je voudrais ajouter apparaissant/disparaissant de l'animation dans le panneau. Voici la présentation simplifiée extrait:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<RelativeLayout
android:id="@+id/layoutSearch"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:visibility="gone" >
<EditText
android:id="@+id/editSearch"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<<Other inner views to be animated>>
</RelativeLayout>
<<Other views, which should not be affected by the animation>>
</LinearLayout>
Essayez 1: j'ai ajouté de l'animation de ressources et de les attacher à l' @id/layoutSearch avec cette ligne dans le fichier XML:
android:layoutAnimation="@anim/search_in_layout"
anim/search_in.xml:
<translate
xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/overshoot_interpolator"
android:fromYDelta="-100%p"
android:toYDelta="0"
android:duration="@android:integer/config_longAnimTime" />
anim/search_in_layout.xml:
<layoutAnimation
xmlns:android="http://schemas.android.com/apk/res/android"
android:animation="@anim/search_in" />
L'animation fonctionne bien, mais seulement pour le panneau apparaissant. Le panneau disparaît en un instant sans animation quand je le cacher avec:
mSearchLayout.setVisibility(View.GONE);
Essayer 2: je suppose que la solution ci-dessus ne fonctionne pas que de l'animation des paramètres de destination selon l'état de la position du panneau. OK, j'ai créé deux plus de l'animation des ressources: anim/search_out.xml et anim/search_out_layout.xml. Les seules différences sont échangés "fromYDelta" et "toYDelta" les valeurs et les mises à jour "android:animation" de la valeur. Puis-je charger les ressources dans le code et les mettre à la @id/layoutSearch comme ceci:
LayoutAnimationController controller =
AnimationUtils.loadLayoutAnimation(this, R.anim.search_out_layout);
mSearchLayout.setLayoutAnimation(controller);
"En dehors" de l'animation déclenchée sur l'appel de setLayoutAnimation(). Après l'animation du panneau de recherche retourne à la position d'origine sur l'écran, il a avant de "sortir" de l'animation. Si j'essaie d'appeler mSearchLayout.setVisibility(View.DISPARU), juste après le setLayoutAnimation(), je ne vois pas l'animation, le groupe disparaît à la fois.
Essayez 3: je suppose que j'ai besoin de créer de l'animation dans le code, puis de définir un écouteur. Alors que je devrais l'appeler mSearchLayout.setVisibility(View.DISPARU) dans le onAnimationEnd() gestionnaire de masquer le panneau après l'animation joué. Je n'ai pas essayé encore. Je pense que c'est plus compliqué.
Je suppose que j'ai manqué quelque chose d'important. Est-il un moyen de mettre en œuvre ALLÉ animation un peu trop facile?
OriginalL'auteur borisstr | 2011-04-08
Vous devez vous connecter pour publier un commentaire.
Que ce que vous devez faire et en fait c'est pas dur à atteindre.
Exemple de code:
Je me demande si vous avez trouvé un moyen de le faire sans l'ennuyeux flash à la fin de l'animation, lorsque la vue se dispose à nouveau, parce que la vue est ALLÉ.
L'ajout d'un constructeur pour cela de prendre une Vue comme un argument est une belle façon de ne pas avoir à répéter le code d'un million de fois. Ensuite, vous pouvez simplement l'appliquer à tout ce que vous voulez avec un.setAnimationListener(nouveau MyAnimationListener(v)); , aussi longtemps que chaque animation est liée seulement à une seule vue bien sûr.
OriginalL'auteur Wroclai
À suivre sur les réponses ci-dessus : voici comment j'ai résolu ce problème.
Veuillez noter que l'établissement setFillBefore et setFillAfter dans votre animation sera conduire à la suite d'un bug! Question 5272: Vue de la visibilité de la Vue.ALLÉ génère toujours des événements tactiles
http://code.google.com/p/android/issues/detail?id=5272
Fichier : MyWebViewActivity.java
Fichier : /res/layout/reader_layout.xml
Fichier : /res/anim/slide_bottom_down.xml
Fichier : /res/anim/slide_bottom_up.xml
Fichier : /res/anim/slide_top_down.xml
Fichier : /res/anim/slide_top_up.xml
vous pouvez appeler la showControlsOverlay() la méthode par exemple à partir d'un onTouch ou onClick auditeur sur une vue. Le hideControlsOverlay() la méthode peut être appelée à partir d'un autre onTouch ou onClick gestionnaire, ou vous pouvez définir un retard praticable pour appeler après quelques secondes pour faire disparaître automatiquement la superposition sans interaction de l'utilisateur.
Merci, je l'ai eu à travailler. Très belle solution. +1
Merci, clearAnimation() problème résolu pour moi.
OriginalL'auteur Akos Cz
vous devez appeler setFillAfter() de l'Animation de la Classe pour l'animation après avoir joué.
OriginalL'auteur Catherine Lau
La définition d'une Vue à
GONE
élimine efficacement à partir de la mise en page. Au lieu de cela, vous devez le régler àINVISIBLE
, puisGONE
après l'animation est terminée, si vous en avez besoin.de cette façon, le travail de Affichage afficher ou masquer, je ne pense pas que ViewGroup travail en tant que bien, mais merci Joseph-Earl les fournir.
OriginalL'auteur Joseph Earl