Bonjour à tous,
voilà le problème:
Je cherche à réaliser un dégradé sur le texte que j'affiche dans ma TextView, je m'y prends comme cela:
Où w correspond à la largeur de ma TextView.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Shader textShader=new LinearGradient(0, 0, w, 0, new int[]{Color.BLUE,Color.RED}, new float[]{0, 1}, Shader.TileMode.CLAMP); this.getPaint().setShader(textShader);
Cela fonctionne plutôt bien quand le texte est centré et prend la majorité de la TextView (le dégradé est appliqué sur toute la largeur de la textView). Mais par contre, si mon texte est petit par rapport à la textView, le dégradé n'est quasiment pas visible.
En effet, si le texte est aligné à gauche, il apparaitra bleu, et si il est à droite, il sera rouge (logique).
L'idée est donc d'initialiser mon LinearGradient à la largeur REELLE de mon texte, et non pas à celui de la TextView. Ainsi, le dégradé sera toujours appliqué de manière optimale.
Y'a-t-il un moyen de récupérer ce genre d'informations via la TextView? (en sachant que cela dépend forcément du font, du textSize...)
Il va surement falloir faire appel à OnMeasure() mais je ne comprends pas trop comment cela fonctionne, et à quel moment est appelé cette méthode dans le cycle de création du TextView.
Si vous avez des idées je suis preneur.
Merci à tous.
Partager