dans un Scrabble - comme application de jeu de mots J'essaie de Dessinez des lettres noires et des valeurs sur des carreaux jaunes.
Bien que cela fonctionne chez Android Emulators sous Windows et Mac: P>
p>
p>
P> Cela ne fonctionne pas (la taille du texte est trop grosse) sur des appareils réels tels que Moto G, Nexus 1 et 4: P>
p>
Je définis les tailles de texte de 60SP strong> et 20SP fort> (j'ai essayé puis utilisez-les dans mon BIGTILE.JAVA CLASSE: P> int letterSize = context.getResources().getDimensionPixelSize(R.dimen.big_tile_letter);
mLetterPaint = new Paint();
mLetterPaint.setTextSize(letterSize);
mLetterPaint.setAntiAlias(true);
Rect letterBounds = new Rect();
mLetterPaint.getTextBounds(letter, 0, letter.length(), letterBounds);
mLetterX = 0.45f * (width - letterBounds.width());
mLetterY = 0.45f * (height + letterBounds.height());
canvas.drawText(letter, mLetterX, mLetterY, mLetterPaint);
4 Réponses :
Si ce que vous voulez convertir une valeur de la Si ce que vous voulez, c'est de fournir un valeur manuelle ou quelque chose comme ça: p>
Mais j'en ai alourdis, gettresources (). Getdimensionpixelsize (r.dimen.something) code> dans mon code (voir ci-dessus). Je ne comprends pas comment votre réponse aide
Êtes-vous sûr que vous avez couvert toutes les valeurs de tous les DPI d'écran?
Une chose qui me vient à l'esprit est que vous utilisez des valeurs Vous pouvez essayer d'utiliser des valeurs sp code>, qui dépendent du paramètre utilisateur dans les paramètres / affichage / la taille de la police. Pouvez-vous vérifier si le paramètre est comme
grand code> ou de même - cela appliquerait une échelle supplémentaire sur votre taille de police. En outre, je crois que les périphériques 2.x Le paramètre par défaut est différent de celui des périphériques 4.x (pas sûr de). P>
dp code> et voir si cela fait toute différence. P>
Désolé, je viens de voir que tu as déjà essayé ça. S'il vous plaît ignorer cette réponse.
Le problème est que Settextsize obtient la valeur de la taille dans SP, pas en pixels. Dans votre cas, GetDimensionPixelsize convertit SP en pixels, puis SettexTexise traite les pixels comme SP, et s'échappe à nouveau.
vide public de stactextisize (taille de flotteur) p>
Définir la taille de texte par défaut sur la valeur donnée, interprétée comme "mise à l'échelle des unités de pixel. Cette taille est ajustée en fonction de la densité de courant et Taille de la police de l'utilisateur Préférence. P> blockQuote>
Pour résoudre ce problème, vous pouvez appeler p>
setTextSize (TypedValue.COMPLEX_UNIT_PX, letterSize)
Mais il n'y a pas de peinture.settextsize () code> prendre 2 arguments?
La documentation que vous citer est pour TextView, ne pas peindre / textpaint. Paint.SetSize () utilise des pixels.
Utiliser Votre problème est que votre image Je suis à peu près sûr que j'ai vu Android Lintn Avertissez ce genre de choses, essayez de le courir sur votre projet. P> DP code> pour que la taille du texte est définitivement la voie à suivre ici, à moins que vous ne souhaitiez pas compenser manuellement le paramètre de la taille de la police de l'utilisateur en modifiant également vos images. P>
BIG_TILE code> est de tailles incohérentes dans les variantes MDPI (128x128) et XXHDPI (256x256): XXHDPI doit être 3 fois la résolution de MDPI, mais votre image n'est que 2 fois la taille, ce qui le rend efficace ~ 85DP au lieu de 128DP. p>
Utilisez la même unité de dimension (
sp code>,
dp code>, quoi que ce soit) pour les lettres et la boîte où vous le dessinez.
+1 Mais le problème est le suivant: les tuiles sont Images PNG et la lettre et la valeur sont des chaînes dessinées avec
canvas.drawtext () code> méthode.
Soit échelle la PNG à être proportionnelle à votre taille de texte ou définissez votre taille de texte comme une proportion de la taille PNG.
Êtes-vous sûr d'avoir une échelle de toile correcte lorsque vous dessinez les lettres?