2015-03-25 1 views
4

I ont un cercle d'épaisseur avec un centre transparent:animer la largeur du contour d'une forme

<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval"> 
    <solid 
     android:color="@android:color/transparent"/> 
    <stroke 
     android:width="24dp" 
     android:color="@android:color/white"/> 
    <size 
     android:width="72dp" 
     android:height="72dp"/> 
</shape> 

et souhaite animer une réduction de la valeur de course de sorte que le centre transparent se dilate, comme un iris.

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <objectAnimator 
     android:propertyName="????" 
     android:valueFrom="24dp" 
     android:valueTo="4dp" 
     android:duration="750" 
     /> 
</set> 

... mais je ne sais pas quoi préciser que le nom de la propriété. "strokeWidth" ne semble pas fonctionner. Je ne suis même pas sûr de savoir comment l'enlever par programmation car GradientDrawable.setStroke() nécessite à la fois une largeur et une couleur et objectAnimator ne peut manipuler que les propriétés d'un seul paramètre.

Répondre

5

Les seules propriétés que vous pouvez animer avec un objet d'animation sont répertoriées here. Vous pouvez le faire de plusieurs façons l'une des plus simples est la suivante:

Créez votre forme par programmation et définissez la valeur avec un ValueAnimator, vous pouvez créer un ValueAnimator de float et ajouter un UpdateListener pour chaque tick que vous pouvez définir la taille du trait, je vais vous laisser un exemple.

Exemple:

final ShapeDrawable circle = new ShapeDrawable(new OvalShape()); 

//Create your shape programatically 
ValueAnimator animation = ValueAnimator.ofFloat(24.0f,12.0f); 
animation.setDuration(1000); 
animation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
     @Override 
     public void onAnimationUpdate(ValueAnimator animation) { 
      circle.getPaint().setStrokeWidth((Float)animation.getAnimatedValue()); 
     } 
}); 

L'exemple va changer votre largeur de trait de 24 à 12 dans une seconde, vous pouvez explorer plus d'informations en ValueAnimator et ShapeDrawable apis, aussi jeter un oeil here, Bonne chance.