¿Cómo mostrar el texto con un fondo de dos colores?

Necesito crear una aplicación para Android, donde el texto de 2 colores se mostrará en el fondo de 2 colores. Ver foto a la izquierda. Entonces, la línea se debe mover con la animación y la imagen del resultado debe ser como en la imagen de la derecha.

Tengo las siguientes preguntas:

  1. ¿Debo usar algún motor 2d para hacer esto? O, ¿estará bien usar las vistas estándar? ¿Cómo hacerlo?
  2. Cómo dibujar el texto como en las fotos?

pic1 ——— pic2

En API de gráficos de Android usaría la ruta de clip para crear la región de clip. Pasos:

  • lienzo de relleno con color negro:

lienzo negro

  • dibuja tu texto blanco sobre lienzo:

Introduzca aquí la descripción de la imagen

  • crear una ruta de clip y aplicarla a su lienzo (consulte Canvas.clipPath (Path) )
  • rellene el lienzo con el color blanco:

Introduzca aquí la descripción de la imagen

  • dibujar el mismo texto que en el paso 2 en negro sobre lienzo:

Introduzca aquí la descripción de la imagen

Puede crear una vista personalizada que enmascara el texto utilizando un filtro PorterDuff.

Aquí es cómo podría verse:

public class MaskedText extends View { String sText; Paint p, pReplace, pMask; public MaskedText(Context context, AttributeSet attrs) { super(context, attrs); // base paint for you text p = new Paint(Paint.ANTI_ALIAS_FLAG); p.setTextSize(40); p.setTextAlign(Paint.Align.CENTER); p.setColor(0xFF000000); p.setStyle(Paint.Style.FILL); // replacement color you want for your the part of the text that is masked pReplace = new Paint(p); pReplace.setColor(0xFFFFFFFF); pReplace.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OVER)); // color of the drawing you want to mask with text pMask = new Paint(); pMask.setColor(0xFFFF0000); pMask.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); } public void setText(String text) { sText = text; } @Override public void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.save(); // here you draw the text with the base color. In your case black canvas.drawText(sText, getWidth() / 2, getHeight() / 2, p); // then draw the shape any graphics that you want on top of it canvas.drawCircle(getWidth() / 2, getHeight() / 2, 50, pMask); canvas.drawCircle(getWidth() / 2 + 50, getHeight()/2 + 5, 20, pMask); canvas.drawCircle(getWidth() / 2 - 45, getHeight()/2 - 10, 30, pMask); // finally redraw the text masking the graphics canvas.drawText(sText, getWidth()/2, getHeight()/2, pReplace); canvas.restore(); } } 

Este es el resultado: Texto enmascarado

Esto no es una respuesta completa, sólo estoy dando sugerencias. Sé una solución posible ¿cómo se puede hacer la imagen de la izquierda y la imagen de la derecha. Pero la parte que no puedo descubrir es la animación. Quiero decir, si quieres animación suave entre los estados. Si sólo desea intercambiar vistas que es fácil, simplemente tomar una vista fliper y que, pero no creo que usted quiere lograr eso …

Una de las cosas que usted puede hacer es fijar el fondo deja para decir con anchura 320 y deja para decir 0-160 blanco y 160-320 negro. Entonces

 tv.setText(Html.fromHtml("<font color='black'>black on white</font> <font color='white'>white on black</font>")); 

por supuesto usted necesitará hacer el cálculo exacto de cuántas letras serán negras y cuántas blancas, pero ése es el concepto

  • Cómo dibujar TiledMap usando scene2d
  • Evento no entregado al oyente
  • La aplicación que utiliza libgdx se reinicia siempre que el dispositivo gira
  • Cargando la textura en libgdx android usando el archivo en res?
  • LibGDX - Obtener deslizar hacia arriba o deslizar derecha, etc?
  • ¿Cómo determinar en qué plataforma se ejecuta la aplicación actual en LibGDX?
  • ¿Puedo añadir un actor a la capa posterior en Libgdx?
  • Textura de texturepacker en LibGDX
  • ¿Libgdx es utilizable para juegos 2d?
  • Aplicar transformaciones de matriz a BoundingBox
  • Diferencia entre la etapa y la pantalla de libgdx
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.