Sujet: [Résolu] Police & Contour

Bonjour,

Je cherche à afficher par le biais d'un canvas.drawText() un texte (sans deconner). Cependant je voudrais qu'il soit entouré par un contour (noir ici). J'ai cherché du coté de Paint, cherché des polices qui intègrent ça de base, impossible.
En gros l'effet que je cherche a obtenir est à peu près ça :
http://viish.free.fr/font.png

Si quelqu'un sait comment creer une police a partir d'une image, je suis preneur aussi.

Merci d'avance.

Modifié pour la dernière fois par Viish (08/02/2010 20:45:41)

Re: [Résolu] Police & Contour

La technique consiste souvent à afficher 2 fois ta chaine :
- une fois en noir d'une taille X
- une fois en blanc d'une taille X-2dip

Il y a peut-être une technique avec les Paints mais j'en doute :s

3

Re: [Résolu] Police & Contour

Juste pour être sur, tu dessines ton deuxième texte aux mêmes coordonnées n'est-ce pas ?
Et comment tu fais pour soustraire 2dip ? Parce que setTextSize(taillePinceau - 2dip) ça marche pas :s

Merci encore pour ton aide.

Re: [Résolu] Police & Contour

Pour obtenir 2dip, il faut multipler 2 pixels (à 160dpi) par la densité :

2dip = 2 * getContext().getResources().getDisplayMetrics().density

Faire simplement une soustraction de 2 peut également suffire si tu veux simplement que ton contour fasse 1 pixel quelque soit la densité.

Je viens d'y repenser ... Il va aussi falloir faire en sorte que l'écart entre les lettres croisse ...

5

Re: [Résolu] Police & Contour

J'ai réussi à "résoudre" mon problème en utlisant une méthode peu orthodoxe mais qui a le mérite de fonctionner :

Comme champ de ma classe héritant ImageView :

private final float shadowRadius = 1.0f;
private final int shadowOffset = 1;
private final int shadowColor = 0xffffffff;

et dans le onDraw(Canvas canvas)

this.p.setShadowLayer(this.shadowRadius, this.shadowOffset, this.shadowOffset, this.shadowColor);
canvas.drawText(this.text, this.posx, this.posy, this.p);
this.p.setShadowLayer(this.shadowRadius, this.shadowOffset, -this.shadowOffset, this.shadowColor);
canvas.drawText(this.text, this.posx, this.posy, this.p);
this.p.setShadowLayer(this.shadowRadius, -this.shadowOffset, this.shadowOffset, this.shadowColor);
canvas.drawText(this.text, this.posx, this.posy, this.p);
this.p.setShadowLayer(this.shadowRadius, -this.shadowOffset, -this.shadowOffset, this.shadowColor);
canvas.drawText(this.text, this.pos, this.posy, this.p);
}

En gros je dessine 4x mon texte, et pour chaque fois je lui applique une ombre dans une direction.

Modifié pour la dernière fois par Viish (08/02/2010 19:57:33)

Re: [Résolu] Police & Contour

C'est une méthode comme une autre mais je pense qu'il existe plus "optimisé" smile

7

Re: [Résolu] Police & Contour

Bonsoir,
vu les questions que tu poses t'es en train de faire un jeu ! avec des animations etc...
Et je sens que tu vas bientôt passer ton appli en openGL...

Du coup tu n'auras plus trop le choix : polices bitmap. Ca te permettra plus de fantaisie également.

8

Re: [Résolu] Police & Contour

En effet Gfel je fais un jeu, avec animations et tout le toutim. Et même si cette solution est loin d'être "propre", elle suffit amplement à ma demande. Et vu que mon jeu est un jeu 2D de cartes (qui a dit Triple Triad ? ^^), je n'ai pas l'intention de passer en OpenGL juste pour 2 pauvres animation et quelques bouts de texte, le résultat actuel me satisfaisant amplement wink