Android: Toile vs OpenGL
J'ai une application de dessin où l'utilisateur peut dessiner des lignes avec son doigt, ajuster la couleur, l'épaisseur, etc. Tant que l'utilisateur est le dessin, je suis la conversion de la massés X/Y points de MotionEvent
en Des Chemins SVG, ainsi que la création de Android du Chemin et puis le dessin de l'Androïde du Tracé à l'écran via une Toile, et d'engager le SVG Chemin d'accès de l'application de base de données.
Je suis sur le modèle de la FingerPaint, que les "en cours" lignes sont tracées à la volée par des appels répétés à invalidate()
(et donc, onDraw()
), et une fois que la ligne est complète, et une nouvelle ligne est commencé, la ligne précédente(s) sont tirés dans onDraw()
de la sous-jacentes Canvas
Bitmap
, avec les progrès des lignes de générer de nouveau répété re-dessine.
Cela fonctionne très bien dans cette application jusqu'à ce que vous commencez à tourner la sous-jacentes Bitmap
pour compenser dispositif de rotation, le soutien de la possibilité de "zoomer" sur la surface de dessin et donc d'avoir à l'échelle de la sous-jacentes Bitmap
, etc. Ainsi, par exemple, avec le dispositif de rotation et le dessin à l'échelle, lorsque l'utilisateur est le dessin, nous avons besoin à l'échelle ET faire pivoter l'image dans onDraw(), et c'est absolument ramper.
J'ai regardé un SurfaceView
, mais comme il utilise toujours la même Canvas
mécanisme, je ne suis pas sûr que je vais voir une amélioration notable... donc, mes pensées se tournent vers OpenGL. J'ai lu quelque part que OpenGL peut faire des rotations et à la mise à l'échelle essentiellement "gratuit", et même vu des rumeurs (troisième commentaire) qui Canvas
peut-être en voie de disparition dans les futures versions.
Essentiellement, je suis un peu coincé entre le Canvas
et OpenGL solutions... j'ai un dessin en 2D application qui semble correspondre à la Canvas
modèle parfaitement lorsque, dans un état, comme il n'y a pas constante re-dessine passe comme un jeu (par exemple lorsque l'utilisateur n'est pas de dessin, je n'ai pas besoin de tout refaire), mais lorsque l'utilisateur EST le dessin, j'ai besoin du maximum de performance nécessaire de faire un peu de plus en plus complexes avec la surface...
Serais heureux de toutes les pensées, les pointeurs et les suggestions.
OriginalL'auteur Paul Mennega | 2011-06-10
Vous devez vous connecter pour publier un commentaire.
OpenGL serait en mesure de gérer la rotation et mise à l'échelle facilement.
Honnêtement, vous auriez probablement besoin d'apprendre beaucoup de OpenGL pour ce faire, particulièrement pour les sujets de:
Aussi, l'apprentissage d'OpenGL pour cela peut-être exagéré, et vous devez être très bon pour le rendre efficace.
Au lieu de cela, je vous conseille d'utiliser les composants graphiques d'un jeu de bibliothèque construite au sommet d'openGL, tels que:
OriginalL'auteur maher.cs
Bien, cette question a été posée il y a 6 ans. Peut-être Android 4.0 n'est pas venu?
En fait, après l'Androïde 4,0 de la Toile à android.vue.La vue est accéléré par le matériel de la toile, ce qui signifie qu'il est implementd par OpenGL, de sorte que vous n'avez pas besoin d'utiliser un autre moyen pour la performance.
Vous pouvez voir la https://github.com/ChillingVan/android-openGL-canvas/blob/master/canvasglsample/src/main/java/com/chillingvan/canvasglsample/comparePerformance/ComparePerformanceActivity.java de comparer les performances de la normale toile avec GLSurfaceView.
OriginalL'auteur ChillingVan
Vous avez raison, SurfaceView utilise la Toile sous le capot. La principale différence est que SurfaceView utilise un autre thread pour faire le dessin, ce qui améliore généralement les performances. Il semble que ça ne serait pas vous aider beaucoup, cependant.
Il est exact que OpenGL peut faire des rotations très rapidement, donc si vous avez besoin de plus de performance qui est le chemin à parcourir. Vous devriez probablement utiliser GLSurfaceView. Le principal inconvénient de l'utilisation de OpenGL, c'est que c'est une vraie douleur pour ne le texte. Fondamentalement, vous devez (bien, n'avez pas à, mais semble être la meilleure option) le rendu des images bitmap texte.
OriginalL'auteur Jim Clay