J'ai une bibliothèque de dessin et avec elle, j'ai une vue personnalisée. Lorsque des mises à jour doivent être effectuées, la bibliothèque appelle la méthode Cependant, lorsque j'ajoute l'attribut de Plus d'infos:
Il semble que lorsque j'appelle Invalidate () Code> () de la vue. Puis la méthode
Ondraw () code> est appelée et tout fonctionne tout simplement bien. P>
upsdkversion = "14" code> à mon fichier
androidmanifest.xml code>, cela cesse de fonctionner. N'est plus mon point de vue
ONDRAW () CODE> Méthode d'être appelé. P>
invalidate () code> à la suite d'une touche enfonce mon application, la vue mise à jour comme prévu. En outre, il y a une animation à l'intérieur de ma bibliothèque qui fonctionne correctement. Donc, apparemment parfois, cela fonctionne correctement. Mais la plupart du temps, il ne se fait pas de se redresser. Existe-t-il d'un état qu'une vue personnalisée peut être en ce sens que le système d'exploitation ignorerait la redessinant après
Invalidate () code> est appelé? P>
3 Réponses :
de Android 3.0, lors de l'utilisation de l'accélération matérielle, le dessin des vues est enregistré et stocké au GPU. P>
Alors, lorsque vous avez deux vues: a ci-dessus B, et vous appelez Ceci est la différence du mode d'accélération non matérielle lorsque toutes les vues b.invalidate code>,
b.ondraw code> sera appelé et enregistré sur le GPU, mais
A.ondraw code> ne sera pas appelé car il est déjà enregistré! P>
Ondraw code> été appelée. P>
Par documents officiels:
Toutefois, comme l'accélération matérielle n'est pas prise en charge pour toutes les opérations de dessin 2D, le tournant sur peut affecter certaines de vos applications utilisant des vues personnalisées ou des appels de dessin. Les problèmes se manifestent généralement comme des éléments invisibles, des exceptions ou des pixels rendu à tort. P>
Pour remédier à cela, Android vous donne la possibilité d'activer ou de désactiver l'accélération matérielle aux niveaux suivants: P>
Application forte> P>
<application android:hardwareAccelerated="true">
<activity ... />
<activity android:hardwareAccelerated="false" />
</application>
Cela semble être un bogue dans Android. Au lieu de invalider () em> essayez d'utiliser la méthode du même nom avec quatre paramètres: d'ailleurs, il est préférable d'invalider cette région que change. Passez à gauche, en haut, à droite, coordonnées inférieures de la région invalidée. p> p>
Est-ce que vous l'appelez toujours à partir du fil de l'interface utilisateur? sinon, vous devez utiliser postinvalidate ().
J'ai essayé de changer l'invalidation de Postinvalidate juste pour vérifier cela, et le problème existe toujours.
L'accélération matérielle est-elle sur ou éteinte?
J'ai changé la Minssdkversion en 11. Donc, je pouvais expliquer explicitement l'attribut hardwareaccepté à "faux" et le problème existe toujours.
Réponse: Donc, il s'avère que je devais appeler
invalider () code> sur une autre vue aussi. Je n'avais pas à faire cela avant la modification du fichier
androidmanifest.xml code>.