Comment puis-je établir une vue animée dans android?
J'ai créé un affichage personnalisé à partir de zéro. Étendue View
et surdéfini onDraw()
.
Quand intervient dans l'animation de la vue-je générer une animation personnalisée à l'aide de décalages.
par exemple.
while(!isOnTop){
mOffset++;
//draw the component a a it higher using the offset
if(position == 0)
isOnTop==true;
invalidate();
}
Le penser, c'est que mes images viennent de l'invalider l'auto. Le problème est que l'invalidation de ce point de vue peut venir juste par défilement d'une listview dans le même écran.
Cette "communauté d'invalidation()" les causes de retard à mon animation.Donc, il y a un moyen de sortir de ce décalage?
Avez-vous d'autres suggestion d'effectuer des animations qui ont partagé l'environnement?
Création d'une animation à l'aide d'un sujet séparé, qui calcule le décalage doit également forcé l'annulation() appels pour afficher l'animation (corrigez-moi si je me trompe).
Est la seule solution pour réaliser l'animation, par exemple dans 10 des demandes d'invalidation avec une plus grande étape? Il sera plus facile de le gal, mais je pense que je peux utiliser une approche différente.
OriginalL'auteur weakwire | 2011-10-01
Vous devez vous connecter pour publier un commentaire.
"Ce qui est le meilleur" bien sûr, dépend de la exactement ce que vous essayez de faire. Vous n'avez pas dit ce que vous essayez d'accomplir, de sorte que nous ne pouvons que deviner ce qui peut être le mieux pour vous.
Voici quelques choses simples:
Si vous souhaitez animer bitmap les images, utilisez AnimationDrawable: http://developer.android.com/reference/android/graphics/drawable/AnimationDrawable.html
Si vous souhaitez animer le mouvement de vues au sein de votre hiérarchie, utilisez le point de vue de l'animation du cadre: http://developer.android.com/guide/topics/graphics/view-animation.html
La nouvelle plus générale animation cadre peut faire beaucoup plus de choses un est souvent plus facile à utiliser: http://developer.android.com/guide/topics/graphics/animation.html. C'est disponibles nativement dans Android 3.0+, mais peut également être utilisé dans l'API Android niveau 7 avec le soutien v7 bibliothèque.
Si vous voulez écrire un widget personnalisé qui fait partie intégrante de son point de vue de la hiérarchie et à la main fait sa propre animation de dessin, vous pouvez utiliser un Gestionnaire à temps les mises à jour (en général, vous aurez envie de 60 im /s ou 20 ms entre chaque invalidate()) et puis dans votre onDraw() la méthode de tirage votre point de vue de l'etat, fondé sur SystemClock.uptimeMillis() comme un delta de fois que l'animation a commencé.
Ici est un simple répété invalider l'aide de Gestionnaire de:
Pas vraiment. Si invalidate() prend plus de 20ms, vous avez de graves problèmes dans la façon dont vous avez structuré votre point de vue de la hiérarchie. La grande majorité des animations au sein de windows dans le standard de la plate-forme de l'utilisation régulière de vues avec invalidate(), et peut atteindre 60 images par seconde. Vous avez juste besoin de s'assurer que vous ne faites pas les choses de votre point de vue de la hiérarchie, comme plusieurs grands opaque images sur le dessus de l'autre ou de mise à l'échelle de prise de dessiner lent... mais vous ne voulez pas faire de toute façon.
N'est-ce pas 20ms 50fps?
Ne pas fps dépendent de matériel et de cpu/gpu/mémoire de charge? I. e. la cohérence des temps d'animation est important, je pense que l'on devrait (efficacement) mesure fps de l'exécution et de déterminer le temps de retard en conséquence.
OriginalL'auteur hackbod
Depuis que cette question a un certain intérêt, je vais répondre.
Le meilleur moyen pour cela, c'est d'avoir une autre toile thread. Un "séparé" de la toile ne peut être réalisé avec un
SurfaceView
. LunarLanding est un excellent exemple de cette utilisation. Chaque image est calculée séparément de la vue principale de partage des CPU seulement le temps, pas le temps de dessin. Il est plus rapide, même avec la combinaison de l'e.g un affichage normal en haut et une animation au bas.Mais vous devez définir un intervalle de temps si vous êtes dans cet environnement partagé. Cet intervalle est utilisé pour le FPS de la pac. Si vous ne définissez pas de FPS bouchon, puis le PROCESSEUR cours d'exécution sauvage de gestion pour obtenir une bonne animation pour les
SurfaceView
si il était seul. Il plafonnement à 60 im /s, voire moins, fera l'affaire pour attirer tous les points de vue de manière efficace avec pas de surcharge du PROCESSEUR.Donc voir le dessin fil de l'alunissage de l'API de démos et de définir un FPS cap.
//ps vous pouvez toujours configurer 16 au lieu de 1000/ips pour le 60FPS pour éviter le calcul à chaque fois
et puis le dessin thread va ressembler à quelque chose comme ceci:
Oui, il est, mais il est le meilleur pour avoir plusieurs vues animées ensemble. la Question était de savoir quelle est la "Meilleure" façon, même si je vous remercie pour la réponse
Celui-ci est en fait la façon dont je suis familier avec de j2me. Si vous n'aimez pas les calculs, vous pouvez toujours sauter de l'informatique et de sommeil pour la constante de temps.
OriginalL'auteur weakwire