2012-01-28 23 views

Respuesta

0

no es perfectamente seguro, pero tal vez usted podría utilizar esto:

link

TextView test = (TextView) findViewById(R.id.test); 

test.setShadowLayer(float, float, float, int); 
+3

La capa de sombra es diferente, pondrá un color específico detrás del texto, luego el texto aparecerá como algo borroso. –

+0

Hmm, creo que sé lo que quieres decir, no crearía el borde limpio, ¿verdad? Estaba pensando en configurar el texto de color negro y como la sombra roja o algo – FabianCook

+0

Mira en "Hola" el borde del color de fondo no es borroso, eso es lo que quiero decir con un borde limpio – FabianCook

15

No utilice FILL_AND_STROKE. Dibuja una vez con FILL y luego cambia el color y dibuja con STROKE.

(. Esto funciona para los rectángulos No estoy seguro de derrame cerebral funciona en absoluto para el texto Vas a tener que probarlo y descubrir..)

+0

lo probé, pero el texto resultante no se ve bien cuando el ancho de trazo es más. –

+0

es más que qué? –

+1

para tamaños de texto y anchos de trazo más altos, el texto resultante se ve feo. –

16

Dentro de Vista de Texto personalizado (que no funciona en EditarTexto):

@Override 
public void onDraw(Canvas canvas) 
{ 
    final ColorStateList textColor = getTextColors(); 

    TextPaint paint = this.getPaint(); 

    paint.setStyle(Style.STROKE); 
    paint.setStrokeJoin(Join.ROUND); 
    paint.setStrokeMiter(10); 
    this.setTextColor(strokeColor); 
    paint.setStrokeWidth(strokeWidth); 

    super.onDraw(canvas); 
    paint.setStyle(Style.FILL); 

    setTextColor(textColor); 
    super.onDraw(canvas); 
} 
+0

Esto no funciona si lo implementa en EditText personalizado, en ese caso en el último setTextColor se muestra, ¿alguna idea de por qué? – TilalHusain

+0

@Architact Lo más probable es que la implementación de 'onDraw' desde' EditText' dibuje un fondo por defecto y, por lo tanto, la segunda llamada pinta sobre la primera. Esto solo funciona para fondo transparente. Lo que tienes que hacer en caso de fondo no transparente es copiar todo el onDraw del super y dibujar el texto solo dos veces. – Trilarion

+0

se activará onDraw para siempre – user924

0

he utilizado la primera solución anterior para llegar a esta idea: dejó un mayor derrame cerebral, texto y luego superponer con un texto más pequeño FILL_AND_STROKE:

mScorePaint = new TextPaint(); 
mScorePaint.setTextSize(63); 
mScorePaint.setStyle(Style.STROKE); 
mScorePaint.setStrokeJoin(Join.ROUND); 
mScorePaint.setStrokeMiter(10.0f); 
mScorePaint.setStrokeWidth(frameWidth/50.0f); // about 12 
mScorePaint.setColor(0xffff0000); // black 

c.drawText(Integer.toString(mScore), x, y, mScorePaint); // red first 

mScorePaint.setStrokeWidth(frameWidth/125.0f); // about 5 
mScorePaint.setColor(0xff000000); // red 

c.drawText(Integer.toString(mScore), x, y, mScorePaint); // black on top 

Debido a que el FILL sola wa No veo ninguno de los atributos de Trazo y estaba saliendo muy delgado.

+0

esto es estúpido, solo quiero usar los parámetros de diseño de TextView, ¿cómo sé qué x, y debería establecer en c Método .drawText, inútil – user924

Cuestiones relacionadas