Conseils concernant le dessin haute performance dans Android

Contexte

J'écris une bibliothèque graphique pour une application Android (oui oui, je sais qu'il y a plein, mais aucun n'offre la fonctionnalité dont nous avons besoin).

Je veux que les graphes soient zoomables et panoramiques.

  • Quelle est la quantité maximale de données qu'une chaîne peut contenir dans java?
  • Erreur: JNI ERROR (bug de l'application): accès à la référence globale existante
  • Lecture des préférences partagées
  • Vérifiez si 'Accès à mon emplacement' est activé - Android
  • Dessiner une disposition carrée dans un cercle
  • Impossible de basculer la base de données de la version 2 à la 1 même après une nouvelle installation et une nouvelle version
  • Problème

    Je veux que l'expérience soit lisse, laissez une petite empreinte CPU.

    Solutions

    • Utilisez View.onDraw(Canvas)
    • Utilisez Bitmap haute résolution
    • Utiliser OpenGL

    View.onDraw ():

    Avantages

    • Quelque facile à mettre en œuvre

    Désavantages

    • Mauvaise performance? (Sauf s'il utilise OpenGL, n'est-ce pas?)

    Bitmap:

    Avantages

    • Très facile à mettre en œuvre
    • Belle performance

    Désavantages

    • Doit utiliser une mise à l'échelle qui est moche

    OpenGL:

    Avantages

    • Probablement une bonne performance selon ma mise en œuvre

    Désavantages

    • Plus de travail à mettre en œuvre

    Mots finis

    OpenGL serait probablement la solution professionnelle et offrirait certainement plus de souplesse, mais il faudrait plus de travail (combien n'est pas clair).

    Une chose qui est certainement plus facile dans OpenGL est le panoramique / zoom, car je peux simplement manipuler la matrice pour l'avoir bien, le reste devrait être plus difficile que je le pense.

    Je n'ai pas peur de me salir les mains mais je veux savoir que je vais dans la bonne direction avant de commencer à creuser.

    Ai-je manqué des solutions? Est-ce que toutes mes solutions sont saines?


    Notes complémentaires:

    Je peux ajouter que lorsqu'un graphique modifie, je souhaite animer les changements, ce sera peut-être la tâche la plus exigeante de tous.

  • Où est Visual Editor pour Eclipse avec le plugin ADT
  • Comment traiter avec Picasso OutOfMemoryError?
  • Theme.Holo.Light.DarkActionBar sur Honeycomb
  • Un taux incroyablement élevé de "carte du client a été refusée" sur l'API d'abonnement
  • Android - Contact du numéro avec le code du pays
  • Android: la disponibilité de Google Analytics dans Google Play Services?
  • One Solution collect form web for “Conseils concernant le dessin haute performance dans Android”

    Le problème avec l'utilisation des vues est que vous héritez des frais généraux de la boîte à outils UI elle-même. Alors que la boîte à outils est assez bien optimisée, ce qu'elle ne fait pas nécessairement ce que vous voulez. Le plus gros inconvénient lorsque vous souhaitez contrôler votre dessin est la boucle invalidate / draw.

    Vous pouvez contourner ce "problème" en utilisant un SurfaceView. Un SurfaceView vous permet de passer à une fenêtre en utilisant votre propre fil de rendu, contournant ainsi les frais généraux de la boîte à outils UI. Et vous pouvez toujours utiliser l'API de rendu Canvas 2D.

    Canvas utilise cependant un pipeline de rendu logiciel. Votre performance dépendra principalement de la vitesse de la CPU et de la bande passante disponible. En pratique, c'est rarement aussi rapide que OpenGL. Android 3.0 offre un nouveau pipeline matériel pour Canvas, mais seulement lors du rendu via Views. Vous ne pouvez pas utiliser à ce moment le pipeline matériel pour le rendre directement sur un SurfaceView.

    Je vous recommanderais de donner une première expérience à SurfaceView. Si vous écrivez votre code correctement (ne dessinez pas plus que vous ne l'avez besoin, redessinez seulement ce qui a changé, etc.), vous devriez pouvoir atteindre les performances que vous recherchez. Si cela ne fonctionne pas, allez avec OpenGL.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.