2010-07-06 6 views
1

est-il un moyen d'appliquer une animation à une propriété d'une vue? Actuellement, la seule animation dont je suis au courant consiste à appliquer une animation à une vue entière. Je me demande si je peux appliquer une animation à une propriété (par exemple layout_width)android animé propriété

Répondre

0

Même si vous souhaitez appliquer l'animation uniquement à une propriété de la vue, vous devez la définir comme animation de la vue.

<scale 
    android:interpolator="@android:anim/accelerate_decelerate_interpolator" 
    android:fromXScale="1.0" 
    android:toXScale="0" /> 

Cette animation modifie par exemple la largeur de votre vue.

Vous pouvez définir l'animation par

yourView.setAnimation(AnimationUtils.loadAnimation(this, R.anim.animation_name)); 
+1

oui, mais le problème est que cette échelles toute la vue. donc si la vue a un fond avec une bordure de 1 dip (par exemple), alors la bordure devient plus épaisse à mesure que l'animation joue. Je veux appliquer l'animation à la propriété, puis faire en sorte que le dessin XML puisse être redessiné afin que la bordure reste à 1 plongeon. – Ben

+1

Vous pouvez utiliser un 9-Patch comme dessin pour l'arrière-plan et définir la bordure comme zone non étirable, de sorte que votre bordure reste fixe. – Mannaz

+0

J'aime cette idée ... mais ... maintenant la question devient, y at-il un moyen de créer un 9patch via xml drawable ... :) – Ben

3

Vous pouvez modifier l'animation d'affecter uniquement certaines parties de la vue. Par exemple, je voulais un ViewFlipper pour avoir l'air de retourner verticalement, j'ai donc fait en sorte que l'animation extérieure rétrécisse le y de la vue à 0 au milieu et l'animation en dedans augmente le y à partir du milieu. Voici à quoi ils ressemblent.

shrink_to_middle.xml

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <scale 
     android:interpolator="@android:anim/linear_interpolator" 
     android:fromXScale="1.0" 
     android:toXScale="1.0" 
     android:fromYScale="1.0" 
     android:toYScale="0.0" 
     android:fillAfter="false" 
     android:duration="200" /> 
    <translate 
     android:fromYDelta="0" 
     android:toYDelta="50%" 
     android:duration="200"/> 
</set> 

grow_from_middle.xml

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <scale 
     android:interpolator="@android:anim/linear_interpolator" 
     android:fromXScale="1.0" 
     android:toXScale="1.0" 
     android:fromYScale="0.0" 
     android:toYScale="1.0" 
     android:fillAfter="false" 
     android:startOffset="200" 
     android:duration="200" /> 
    <translate 
     android:fromYDelta="50%" 
     android:toYDelta="0" 
     android:startOffset="200" 
     android:duration="200"/> 
</set>