Android establece una fuente personalizada en una pintura

91

Quiero dibujar un texto en una pintura. ¿Cómo dibujarlo con una fuente personalizada ( ex Helvetica ) y también en negrita? Preferiría usar una fuente del sistema y no crearla a partir de activos. Gracias.

Buda Gavril
fuente
"pintar": ¿Quieres decir Canvas?
Tony the Pony
sí, necesito la pintura para establecer algunos estilos ...
Buda Gavril
Cómo configurar la fuente según la configuración regional, por ejemplo, para inglés queremos usar arial.ttf y para coreano quiero usar gothic_B.ttf. Cómo es posible con pintura sobre lienzo en Android
Dwivedi Ji
@DwivediJi: ¿Has intentado publicar eso como una pregunta de StackOverflow, en lugar de un comentario sobre la pregunta de otra persona?
Michael Scheper

Respuestas:

164

Si por "fuente personalizada" te refieres a una fuente que estás proporcionando como activo, el siguiente código debería funcionar:

Typeface plain = Typeface.createFromAsset(assetManager, pathToFont); 
Typeface bold = Typeface.create(plain, Typeface.DEFAULT_BOLD)
Paint paint = new Paint();
paint.setTypeface(bold);
canvas.drawText("Sample text in bold",0,0,paint);
Tony el pony
fuente
Helvetica no está instalada, pero he usado algunas fuentes instaladas para comparar. Si estoy usando una fuente de activos, ¿tiene alguna idea de cómo configurar el negrita?
Buda Gavril
6
Proveedores: Typeface plain = Typeface.createFromAsset(assetManager, pathToFont); Typeface bold = Typeface.create(plain, Typeface.DEFAULT_BOLD).
Tony the Pony
2
@TonythePony tu código no funciona para mí. Typeface fontFace = Typeface.createFromAsset (getAssets (), "fonts / comic.TTF"); Typeface face = Typeface.create (fontFace, Typeface.BOLD); Pintura pintura = nueva Pintura (); paint.setTextAlign (Paint.Align.CENTER); paint.setColor (Color.WHITE); paint.setTextSize (10); paint.setTypeface (cara); paint.setFlags (Paint.ANTI_ALIAS_FLAG);
Dwivedi Ji
1
Lo intentaste getContext().getAssets()?
Wesley
2
Typeface.DEFAULT_BOLDtambién me dio problemas, pero el cambio a Typeface.BOLDfuncionó
CrandellWS
26

Si está utilizando las nuevas fuentes de Android en XML para sus fuentes, para obtener el tipo de letra utilizado para la pintura, puede usar:

val customTypeface = ResourcesCompat.getFont(context, R.font.myfont)

o si su API de Android mínima> = 26

val customTypeface = resources.getFont(R.font.myfont)

Luego, para aplicarlo a su objeto de pintura:

mTextPaint.typeface = customTypeface

Para obtener más información, consulte https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml#fonts-in-code

Sebastián Helzer
fuente
16

Use esto para la clase de pintura:

 Paint paint = new Paint();
   paint.setTypeface(Typeface.create("Arial",Typeface.ITALIC));
Pritam
fuente
9

Si ya tiene una fuente en uso y desea usar una versión en negrita, puede hacerlo.

currentPainter = new Paint(Paint.ANTI_ALIAS_FLAG);
currentPainter.setColor(Color.WHITE);
currentPainter.setTextSize(Utils.sp2px(getResources(), 14)); // set font size
Typeface currentTypeFace =   currentPainter.getTypeface();
Typeface bold = Typeface.create(currentTypeFace, Typeface.BOLD);
currentPainter.setTypeface(bold);

Usé la respuesta anterior, pero esta modificación era necesaria para mí, así que pensé en mencionarla

Neil D'Souza
fuente
1

Si desea utilizar una fuente de recursos (Kotlin):

val textPaint = TextPaint()
textPaint.typeface = resources.getFont(R.font.font_name)

Puede que esto no esté relacionado con la pregunta, pero esto es lo que estaba buscando, tal vez alguien también lo necesitaría.

Paweł Rubin
fuente