Android透明文字

我需要在渐变背景上显示TextViewTextView本身应该是纯白色背景,文本应该是透明的。

但是,为文本设置透明颜色(#00000000)不起作用:它仅显示白色矩形,背景不显示文本的位置(文本采用与TextView背景相同的颜色)。

如何在TextView上显示带背景颜色的透明文本?

更新,2016年1月30日

我创建了一个小型库,并在此答案中写了一篇博文 ,因此您无需复制和粘贴代码,我会为您进行维护。 🙂

使用xml中的视图:

  

Gradle依赖:

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

原始答案

这就是你如何实现这种效果:

  1. 您在位图上的透明背景上渲染文本
  2. 您使用该位图剪切纯白色背景中的文本形状

这是TextView一个简单子类,它可以做到这一点。

 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); } } 

示例屏幕截图 :活动背景的靛蓝图案,TextView背景的粉红色实心填充。

这适用于纯色背景和普通绘图。 无论如何,这只是一个BASIC实现,不支持某些function,如平铺。

我没有尝试过这个,但你可以通过(反对所有文档建议)通过TextView.getTextPaint()获取TextPaint并调用setXferMode(new PorterDuffXferMode(PorterDuff.Mode.MULTIPLY)),以便清除渲染时背景上的alpha位。

否则,实现您自己的文本视图,您可以完全控制渲染。

  

在此处输入图像描述

在黑色背景中,Textview将如下所示。 我希望这能帮到您。

更新1:

  

在此处输入图像描述

点击此处,文字颜色为黑色(不是灰色)。 因此,如果您更改文本视图背景颜色,文本颜色也会更改,我认为这称为透明。 对不起如果我错了。

使用Textview背景执行任何操作,但要使Textview上的文本变为透明,请使用以下代码。

   

希望这可以帮助你……

将此代码添加到textview标记:

  android:background="#07000000"