Cómo esbozar un TextView?
¿Lo que quiero hacer? (El azul será cambiado como blanco)
¿Lo que hice?
He encontrado una clase que extiende TextView que capaz de contorno textview muy cerca de lo que quiero. El problema es que no podía cambiar el color del trazo a ningún color, dibuja siempre como negro. ¿Cómo configurar el color del borde como blanco?
- Acerca de Android Paint dibujo de color
- Temporizador de rectángulo de dibujo de Android con animación
- Dibuja un centro de texto de una imagen de android
- Acceso rápido y manipulación de píxeles android
- Android dibujar con desenfoque
¿Cuál es mi salida:
¿Dónde están mis códigos?
public class TypeFaceTextView extends TextView { private static Paint getWhiteBorderPaint(){ Paint p = new Paint(Color.WHITE); return p; } private static final Paint BLACK_BORDER_PAINT = getWhiteBorderPaint(); static { BLACK_BORDER_PAINT.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT)); } @Override public void setText(CharSequence text, BufferType type) { super.setText(String.format(text.toString()), type); } private static final int BORDER_WIDTH = 1; private Typeface typeface; public TypeFaceTextView(Context context) { super(context); } public TypeFaceTextView(Context context, AttributeSet attrs) { super(context, attrs); setDrawingCacheEnabled(false); setTypeface(attrs); } private void setTypeface(AttributeSet attrs) { final String typefaceFileName = attrs.getAttributeValue(null, "typeface"); if (typefaceFileName != null) { typeface = Typeface.createFromAsset(getContext().getAssets(), typefaceFileName); } setTypeface(typeface); } public TypeFaceTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); setTypeface(attrs); } @Override public void draw(Canvas aCanvas) { aCanvas.saveLayer(null, BLACK_BORDER_PAINT, Canvas.HAS_ALPHA_LAYER_SAVE_FLAG | Canvas.FULL_COLOR_LAYER_SAVE_FLAG | Canvas.MATRIX_SAVE_FLAG); drawBackground(aCanvas, -BORDER_WIDTH, -BORDER_WIDTH); drawBackground(aCanvas, BORDER_WIDTH + BORDER_WIDTH, 0); drawBackground(aCanvas, 0, BORDER_WIDTH + BORDER_WIDTH); drawBackground(aCanvas, -BORDER_WIDTH - BORDER_WIDTH, 0); aCanvas.restore(); super.draw(aCanvas); } private void drawBackground(Canvas aCanvas, int aDX, int aDY) { aCanvas.translate(aDX, aDY); super.draw(aCanvas); } }
- Dibujo de un pulgar hueco redondeado sobre arco
- Cree una ruta de trazado con Google Maps sin conexión
- ¿Cómo conseguir el área total cubierta mientras que dibuja la trayectoria en el androide de la lona?
- Android: trazado de dibujo como superposición en MapView
- Redibujar múltiples rutas en las mismas posiciones de la orientación anterior de la disposición
- Cómo dibujar una ruta entre dos geopuntos en el Android
- Android drawBitmap (...) el método es lento?
- Personalizar una ProgressBar para convertirse en un termómetro
1) crear su objeto textview extiende TextView
public class YourTextView extends TextView { .........
2) Hacer esto en su método de dibujo
@Override public void draw(Canvas canvas) { for (int i = 0; i < 5; i++) { super.draw(canvas); } }
3) establece el lado xml de textview como abajo
android:shadowColor="@color/white" android:shadowRadius="5"
¿No podría esto esto pero intentar experimentar con: PorterDuff.Mode
http://developer.android.com/reference/android/graphics/PorterDuff.Mode.html
Intente cambiarlo a "ADD" o "CLEAR", espero que esto ayude.
Necesita cambiar el método getWhiteBorderPaint () a lo siguiente:
private static Paint getWhiteBorderPaint(){ Paint p = new Paint(); p.setColor(Color.WHITE); return p; }
El constructor Paint sólo toma banderas de bits y no admite parámetros arbitrarios como parámetros.
Investigado en el problema original planteado por esta pregunta. Encontré la solución.
Primero, cambie DST_OUT a DARKEN
static { BLACK_BORDER_PAINT.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DARKEN)); }
En segundo lugar, guarde el color del texto original y coloque el color del esquema deseado, dibuje el contorno y, a continuación, restaure el color del texto original.
@Override public void draw(Canvas aCanvas) { int originalColor = this.getCurrentTextColor(); this.setTextColor(0xff000000); //set it to white. aCanvas.saveLayer(null, borderPaint, Canvas.HAS_ALPHA_LAYER_SAVE_FLAG | Canvas.FULL_COLOR_LAYER_SAVE_FLAG | Canvas.MATRIX_SAVE_FLAG); drawBackground(aCanvas, -BORDER_WIDTH, -BORDER_WIDTH); drawBackground(aCanvas, BORDER_WIDTH + BORDER_WIDTH, 0); drawBackground(aCanvas, 0, BORDER_WIDTH + BORDER_WIDTH); drawBackground(aCanvas, -BORDER_WIDTH - BORDER_WIDTH, 0); this.setTextColor(originalColor); aCanvas.restore(); super.draw(aCanvas); }