Rotation de l'image. L'Animation de la liste ou animation, de tourner? (Android)
Je veux créer une rotation d'image de progression, et je me demande quelle est la meilleure façon de procéder. Je peux le faire fonctionner avec une animation liste avec par exemple 12 images changent toutes les 100ms. Cela fonctionne bien, mais c'est assez fastidieux de créer 12 images pour chaque taille et résolution:
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false">
<item android:drawable="@drawable/ic_loading_grey_on_black_01" android:duration="100" />
<item android:drawable="@drawable/ic_loading_grey_on_black_02" android:duration="100" />
<item android:drawable="@drawable/ic_loading_grey_on_black_03" android:duration="100" />
<item android:drawable="@drawable/ic_loading_grey_on_black_04" android:duration="100" />
<item android:drawable="@drawable/ic_loading_grey_on_black_05" android:duration="100" />
<item android:drawable="@drawable/ic_loading_grey_on_black_06" android:duration="100" />
<item android:drawable="@drawable/ic_loading_grey_on_black_07" android:duration="100" />
<item android:drawable="@drawable/ic_loading_grey_on_black_08" android:duration="100" />
<item android:drawable="@drawable/ic_loading_grey_on_black_09" android:duration="100" />
<item android:drawable="@drawable/ic_loading_grey_on_black_10" android:duration="100" />
<item android:drawable="@drawable/ic_loading_grey_on_black_11" android:duration="100" />
<item android:drawable="@drawable/ic_loading_grey_on_black_12" android:duration="100" />
Je suppose qu'une solution plus simple est d'utiliser une image par résolution, mais plutôt de la faire pivoter pour chaque image. Dans les ressources de la plateforme (android-sdk-windows/plates-formes...), j'ai trouvé quelque chose qui s'appelle animés-tourner dans le fichier drawable/search_spinner.xml mais si je copie le code obtenez une erreur du compilateur se plaint d'android:framesCount et android:frameDuration (Google Api 2.2 dans Eclipse):
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/spinner_black_20"
android:pivotX="50%"
android:pivotY="50%"
android:framesCount="12"
android:frameDuration="100" />
J'ai aussi essayé d'utiliser une répétition de rotation de l'animation (à l'aide de l'anim dossier de ressources), mais je préfère le look de l'animation de la liste de version.
Quelle est la meilleure façon de résoudre ce problème?
Vous devez vous connecter pour publier un commentaire.
Rotate drawable
suggéré par Praveen ne vais pas vous donner le contrôle du nombre d'images. Supposons que vous souhaitez mettre en œuvre un chargeur personnalisé qui se compose de 8 sections:À l'aide de
animation-list
approche, vous avez besoin pour créer de 8 images en rotation par45*frameNumber
degrés manuellement. Alternativement, vous pouvez utiliser la 1ère image et définir la rotation de l'animation: lesFichier
res/anim/progress_anim.xml
:Fichier
MainActivity.java
Cela vous donnera l'animation en douceur au lieu de 8 à gradins. Pour corriger cela, nous devons mettre en œuvre personnalisée de l'interpolateur:
Aussi, vous pouvez créer un widget personnalisé:
Fichier
res/values/attrs.xml
:Fichier
ProgressView.java
:Fichier
activity_main.xml
:Fichier
res/anim/progress_anim.xml
: énumérés ci-dessusandroid:visibility="invisible"
n'importe quelle raison ?Vous devez créer un drawable fichier xml comme ci-dessous:
Code:
J'ai trouvé vokilam, la réponse à être le meilleur pour créer une belle intensifier décalés d'animation. Je suis allé de sa proposition finale et a fait un widget personnalisé, le seul problème que j'ai rencontré, c'est que la définition de la visibilité de ne pas travailler parce qu'il était animé, et, donc, toujours être visible...
J'ai modifié son code (ProgressView.java qui j'ai renommé StaggeredProgress.java) comme ceci:
De cette façon paramétrage de l'affichage de la visibilité commence et s'arrête l'animation en tant que de besoin...encore un grand merci à vokilam!
voir les exemples ici
http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/index.html
spécifiquement:
Barre De Progression
Montre de petite et de grande rotation des indicateurs de progrès qui peut être incrémenté ou décrémenté dans les unités.
Montre de grandes et de petites rotation continue des progrès les indicateurs utilisés pour indiquer un générique "occupé" message.
Démontre une ProgressDialog, une fenêtre de dialogue qui héberge une barre de progression. Cet exemple illustre à la fois déterminée et indéterminée des indicateurs de progrès.
Démontre une Activité de l'écran avec un indicateur de progression chargé par le réglage de la WindowPolicy indicateur de progression de la fonctionnalité.
SACPK la solution fonctionne bien. Une autre solution peut être d'utiliser
<animated-rotate>
, tout comme dans la question et supprimerandroid:framesCount="12"
attributs pour ceux qui le compilateur se plaint. Il fonctionne toujours, même pour mes 8-image.android:frameDuration="100"
Cependant, je havn'pas compris comment contrôler la vitesse de l'animation :(.
Merci @vokilam. Cette solution similaire (une vue personnalisée qui tourne automatiquement) utilise
<animation-list>
de façon dynamique dans sa mise en œuvre:Voir Android-FramesAnimatorView sur GitHub complet (et probablement plus mis à jour) code source.