Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Texto transparente de Android

Necesito mostrar un TextView sobre un fondo del gradiente. El propio TextView debe tener un fondo blanco y el texto debe ser transparente.

Sin embargo, el ajuste de un color transparente (# 00000000) al texto no funciona: sólo muestra un rectángulo blanco, el fondo no aparece donde está el texto (el texto toma el mismo color que el fondo de TextView ).

¿Cómo puedo mostrar un texto transparente con un color de fondo en mi TextView ?

  • ¿Cómo hacer gradiente transparente?
  • Android cómo dibujar un mapa de bits sobre lienzo semi transparente
  • Cómo cambiar el color de fondo de un mapa de bits transparente guardado
  • 5 Solutions collect form web for “Texto transparente de Android”

    Actualización, 30 de enero de 2016

    Hice una pequeña biblioteca y escribí una entrada de blog de esta respuesta, por lo que no es necesario copiar y pegar código y hacer el mantenimiento para usted. 🙂

    Utilice la vista en xml como:

     <it.gilvegliach.android.transparenttexttextview.TransparentTextTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/view_bg" android:text="Hello World" /> 

    Dependencia de Gradle:

      compile 'it.gilvegliach.android:transparent-text-textview:1.0.3' 

    Respuesta Original

    Así es como puede lograr ese efecto:

    1. Renderizar el texto sobre un fondo transparente en un mapa de bits
    2. Usted utiliza ese mapa de bits para recortar la forma del texto fuera del fondo blanco sólido

    Aquí hay una subclase simple de TextView que hace eso.

     final public class SeeThroughTextView extends TextView { Bitmap mMaskBitmap; Canvas mMaskCanvas; Paint mPaint; Drawable mBackground; Bitmap mBackgroundBitmap; Canvas mBackgroundCanvas; boolean mSetBoundsOnSizeAvailable = false; public SeeThroughTextView(Context context) { super(context); mPaint = new Paint(); mPaint.setXfermode(new PorterDuffXfermode(Mode.DST_OUT)); super.setTextColor(Color.BLACK); super.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); } @Override @Deprecated public void setBackgroundDrawable(Drawable bg) { mBackground = bg; int w = bg.getIntrinsicWidth(); int h = bg.getIntrinsicHeight(); // Drawable has no dimensions, retrieve View's dimensions if (w == -1 || h == -1) { w = getWidth(); h = getHeight(); } // Layout has not run if (w == 0 || h == 0) { mSetBoundsOnSizeAvailable = true; return; } mBackground.setBounds(0, 0, w, h); invalidate(); } @Override public void setBackgroundColor(int color) { setBackgroundDrawable(new ColorDrawable(color)); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); mBackgroundBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); mBackgroundCanvas = new Canvas(mBackgroundBitmap); mMaskBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); mMaskCanvas = new Canvas(mMaskBitmap); if (mSetBoundsOnSizeAvailable) { mBackground.setBounds(0, 0, w, h); mSetBoundsOnSizeAvailable = false; } } @Override protected void onDraw(Canvas canvas) { // Draw background mBackground.draw(mBackgroundCanvas); // Draw mask mMaskCanvas.drawColor(Color.BLACK, PorterDuff.Mode.CLEAR); super.onDraw(mMaskCanvas); mBackgroundCanvas.drawBitmap(mMaskBitmap, 0.f, 0.f, mPaint); canvas.drawBitmap(mBackgroundBitmap, 0.f, 0.f, null); } } 

    Ejemplo de captura de pantalla : patrón índigo para el fondo de la actividad, relleno sólido rosado para el fondo TextView.

    Esto funciona tanto para fondos de colores sólidos como para dibujos generales. De todos modos, esto es sólo una implementación BASIC, algunas características como el mosaico no son compatibles.

    No he intentado esto, pero es posible que pueda hacerlo por (contra todos los consejos de documentación) obtener el TextPaint a través de TextView.getTextPaint () y llamar a setXferMode (nuevo PorterDuffXferMode (PorterDuff.Mode.MULTIPLY)), para borrar el Bits alfa en el fondo durante la representación.

    De lo contrario, implemente su propia vista de texto donde esté en control total de la representación.

     <TextView android:id="@+id/textNext2" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center|center_vertical" android:text="Textview" android:textColor="#22000000" android:background="#ffffff" android:textSize="17dp" /> 

    Introduzca aquí la descripción de la imagen

    Textview se verá así, en fondo negro. Espero que esto ayude.

    Actualización 1:

     <TextView android:id="@+id/textNext2" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center|center_vertical" android:text="Textview" android:textColor="#22000000" android:background="#333333" android:textSize="17dp" /> 

    Introduzca aquí la descripción de la imagen

    Compruebe aquí, el color de texto es negro (no gris) con este fondo. Tan si usted cambia su color de fondo de la opinión del texto, el color de texto también consigue cambiado, pienso que esto se llama transparente. Lo siento si estoy equivocado.

    Hacer lo que con su fondo de texto, pero para hacer que el texto en Textview convertido en transparente utilizar el código a continuación.

     <TextView ... ... android:textColor="#00000000" > </TextView> 

    Espero que esto te ayude …

    Agregue este código a su etiqueta de texto:

      android:background="#07000000" 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.