¿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:
- Laggy proyecto vacío a 60FPS
- No se pueden cargar archivos de sonido LibGdx
- touchdown mantenido libgdx
- API de la interfaz de usuario para libgdx
- LIBGDX Entrada - Número de dedos que tocan la pantalla
- ¿Debo usar algún motor 2d para hacer esto? O, ¿estará bien usar las vistas estándar? ¿Cómo hacerlo?
- Cómo dibujar el texto como en las fotos?
———
- ¿Cómo libgdx detecta la presencia del teclado?
- Centre SelectBox texto en libgdx usando scene2d
- Cómo agregar código nativo de Android a LibGDX?
- Fondo animado con Libgdx
- Uso de scene2d.ui con libgdx: ¿De dónde proviene la piel?
- Integración multimedia con LibGDX
- ¿ClickLIstener no está trabajando en el juego de LibGdx?
- ¿Cuál es la forma más sencilla de hacer que la imagen sea táctil en libgdx?
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:
- dibuja tu texto blanco sobre lienzo:
- crear una ruta de clip y aplicarla a su lienzo (consulte Canvas.clipPath (Path) )
- rellene el lienzo con el color blanco:
- dibujar el mismo texto que en el paso 2 en negro sobre lienzo:
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 puedo crear un Android AVD para un Samsung Galaxy Note 2?
- Confundido acerca de la sincronización de varias tablas con el adaptador de sincronización y el proveedor de contenido