est-il possible de créer un draigable qui a une sorte d'animation, qu'il s'agisse d'une image par image de cadre, de rotation, etc., définie comme un XML draigable et peut être représentée par un seul objet étiré sans avoir à traiter Avec l'animation en code?
Comment je pense à l'utiliser: J'ai une liste et chaque élément de cette liste peut parfois avoir quelque chose qui se passe quelque chose. Bien que cela se produise, j'aimerais avoir une animation de progrès en filage semblable à une barre de progression indéterminée. Comme il peut également y en avoir plusieurs d'entre eux à l'écran, je pensais que s'ils ont tous partagé le même goût, ils n'en auraient besoin que d'une instance en mémoire et que leurs animations seraient synchronisées de sorte que vous n'auriez pas de tas d'objets de filature dans divers points Dans l'animation de filature. P>
Je ne suis pas attaché à cette approche. J'essaie simplement de penser à la manière la plus efficace d'afficher plusieurs animations de progression de la filature et de les avoir parfaitement synchronisées afin qu'elles soient cohérentes en apparence. P>
merci p>
Réponse à la réponse de Sybiam: strong> p> J'ai essayé de mettre en œuvre une rotationDrawable mais elle ne tourne pas. p> Voici mon XML pour le digilable jusqu'à présent: P> < PRE> XXX PRE> J'ai essayé d'utiliser cela dradable en tant que SRC et l'arrière-plan d'une vision image et des deux sens ne produisait qu'une image non rotative. P> existe quelque chose qui doit démarrer la rotation de l'image? p> p>
7 Réponses :
Vous pouvez commencer à étudier le ProgressBar2 du projet DEMOS API (il est disponible dans le cadre du SDK). Faites attention particulièrement portée à r.layout.progressbar_2 code>. P>
Drawables P>
Voilà y aller! Et celui-ci pour Tournerrable . Je crois que de la DOC, cela devrait être assez étroit. Vous pouvez tout définir dans un fichier XML et définir l'arrière-plan d'une vue en tant que XML digue. /Drawable/myrotate.xml -> @ Diable / Myrotatate P>
EDIT: C'est une réponse que j'ai trouvée ici. Tirable rotative autour de son centre Android P>
EDIT 2: Vous avez raison, la rotationDrable semble brisée. Je ne sais pas que je l'ai essayé aussi. Je n'ai pas encore réussi à faire l'animation. Mais j'ai eu la chance de le faire pivoter. Vous devez utiliser une enveloppe qui le fera pivoter. Bien que cela n'a pas l'air vraiment utile. J'ai parcouru le code et la rotationDrable ne gonfle même pas la durée d'animation et la rotation actuelle semble étrangement utilise le niveau comme mesure de rotation. Je crois que vous devez l'utiliser avec une animationDrawable mais ici encore. Cela vient de m'échapper pour moi. Je n'ai pas encore utilisé cette fonctionnalité mais prévu de l'utiliser à l'avenir. J'ai parcouru le Web et la rotationDrable semble être très non documentée comme presque tous les objets drables. P>
J'ai essayé ma chance avec la rotationDrable et elle n'a pas animé. Plus de détails dans ma question initiale. Une idée de ce que je fais mal?
Donc, la rotationDrawable doit être programmée? Je suppose que ce genre de défaite le but d'essayer de le gérer dans XML. Comment allez-vous commencer?
Le rotatorrawable code> est (programmatiquement) totalement inutile avant l'API Android 21. Vous pouvez l'initialiser, mais vous ne pouvez pas définir son enfant, ni définir son angle de rotation. Fou.
Oui! La clé (sans papiers), que j'ai découverte en lisant le code code> de la barre code> est que vous devez appeler Le XML diguré: p> in Malheureusement, puisque vous devez modifier drawable.setlevel () code> dans
ondraw () code> Pour que le
ProgressBar code> fonctionne comme ceci (code supplémentaire sans importance omis):
Ondraw () : p>
max_level code> est une constante et est toujours 10000 (selon les documents).
anim_period code> est la période de votre animation en millisecondes. P>
ONDRAW () CODE> Vous ne pouvez pas simplement mettre ceci introduit dans un
imageview code> depuis
imageview code> ne modifie jamais le niveau d'introduction. Cependant, vous pouvez être capable de changer le niveau d'étimement de extérieur em> le
imageview code>.
ProgressBar code> (AB) utilise un
alphanumation code> pour définir le niveau. Donc, vous feriez quelque chose comme ceci: P>
ObjectAnimator anim = ObjectAnimator.ofInt(myImageVew, "ImageLevel", 0, MAX_LEVEL);
anim.setRepeatCount(ObjectAnimator.INFINITE);
anim.start();
N'y a-t-il pas une solution que dans XML?
drawable.setlevelvel () code> est plus pratique. Par exemple:
objectanimator.oFint (digue, "niveau", 0, 10000) code>
C'est ... dans ma réponse.
@Timmmm Ce n'est pas ce que demandait l'OP, il demandait spécifiquement une solution purement XML.
@LULDVIGW: Ceci est aussi proche que possible de l'obtenir aussi loin que je sache.
Voici l'une des manières possibles (particulièrement utile lorsque vous avez un endroit introduit quelque part et devez l'animer). L'idée est d'envelopper le dessinable et de le décorer avec une animation. Dans mon cas, je devais le faire pivoter, alors ci-dessous, vous pouvez trouver des échantillons de mise en œuvre: et vous pouvez l'utiliser comme ceci (icône de navigation de la barre d'outils tournante 360 degrés): p> < Pré> xxx pré> Il ne doit pas être difficile d'ajouter une méthode qui le fera pivoter indéfini ( SetrepeatMode Infinite pour animateur code>) P> P>
Qu'est-ce que @animitarsetter, il ne compile pas avec elle.
L'instance de vocordrawable provoque une crash sur la pré-sucette et non nécessaire à moins que ce soit vectoriel.
De plus, cette classe devra être conservée à Proguard.
@Stevem Vous pouvez utiliser le chèque suivant pour supporter PRE Lollipop (instance drail de VectordrawawaBacompat || digue.getable.getclass (). GetsImplename (). Equals ("Vetordrawable")) Pluto (instance dessinable de vocordrawable) AnimAsetter est mon annotation personnalisée que je Utilisez pour indiquer à Proguard et à Android Studio que la méthode doit être conservée comme cela.
private ValueAnimator rotateDrawable(RotateDrawable drawable, int fromDegree, int toDegree) { drawable.setFromDegrees(fromDegree); drawable.setToDegrees(toDegree); return ObjectAnimator.ofInt(drawable, "level", 0, 10000); } level is the interpulting value from 0 to 100000. the actual animation values are set by the setter methods
Vous pouvez utiliser StateListanimator P>
xxx pré> et rebondir p> blockQuote>
xxx pré> blockquote>
Je reprends la vie ce poteau juste pour poster ma solution avec vecteur digue:
Vous avez donc besoin d'un vecteur introduit dans une ressource dessinable (@ drail / ic_brush_24dp): p>
<ui.component.ImageView android:id="@+id/test_anim_brush" android:layout_width="48dp" android:layout_height="48dp" android:layout_gravity="center_horizontal" android:background="@drawable/test_anim_brush2"/>
Checkout Stackoverflow.com/a/30901885/1052261