5

Je travaille sur une vue de graphique personnalisée Android qui utilise Canvas # drawLines et un objet de peinture qui a antialiasing activé. Mon vue a l'accélération matérielle activée. Parfois, lorsque je pince le zoom avant/arrière, certaines lignes de mon graphique apparaissent disjointes et elles se réduisent en dégradé. Si je change de couche logicielle ou si je désactive l'antialiasing, le problème disparaît. Est-ce un bug avec drawLines ou est-ce que quelqu'un a une idée de ce qui pourrait se passer?Android - drawline avec l'accélération matérielle et l'antialiasing provoque des artefacts

La première image présente le problème, la deuxième image a été déplacée légèrement et montre comment le graphique se présente la plupart du temps, avec des lignes entièrement jointes.

(l'image montre numéro) enter image description here

(image montrant comment le graphique devrait ressembler - encore quelques lacunes mineures) enter image description here

Répondre

1

Je pense que ce message par Romain Guy répond à certaines de vos questions: http://android-developers.blogspot.com/2011/03/android-30-hardware-acceleration.html

Essentiellement, l'anti-aliasing n'est pas pris en charge par drawLines lorsque l'accélération matérielle est activée. Souvenez-vous également que l'accélération matérielle ne sera pas toujours «meilleure» pour votre application. Si ce que vous dessinez peut être accéléré, votre application en bénéficiera, mais pour certaines opérations, cela pourrait être pire. Je crois que cela explique pourquoi vos lignes semblent disjointes lors de l'accélération matérielle. Cependant, je ne suis pas sûr que cela explique pourquoi cela fonctionne quand vous désactivez l'anti-aliasing. J'imagine que cela semble décousu même avec l'anti-aliasing, mais clairement ce n'est pas le cas!

+0

Merci. J'avais rencontré le problème similaire. J'avais essayé de résoudre, en utilisant 'LAYER_TYPE_SOFTWARE'. Cependant, la chose semble plus lente, comme dans le tableau, il y a une croix en mouvement, basée sur mon événement tactile. Est-ce que tu sais pourquoi? Ma conjecture est, le temps est pris, pour transférer le bitmap hors écran du logiciel, à GPU quand 'LAYER_TYPE_SOFTWARE' est utilisé. –

+0

Après désactiver l'anti-alias, bien que le problème disjoint ne semble plus, la ligne tracée n'est pas lisse et semble moche. –

1

Essayez de forcer une actualisation après les mouvements de redimensionnement. Regardez l'ancienne application Accelerometer Toy. (Oui, il a vraiment besoin d'être mis à jour ...) Si vous ne voyez pas le problème avec cette application, alors je peux probablement vous aider.

Questions connexes