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.


"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);

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


16

Use esto para la clase de pintura:

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

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


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.