gpt4 book ai didi

android - Android 中 Textview 的屏蔽属性

转载 作者:行者123 更新时间:2023-11-29 00:24:17 24 4
gpt4 key购买 nike

我的Activity中有一个scrollViewscrollView的背景有多种颜色。

<ScrollView ---------->
<RelativeLayout -------------/>
</ScrollView>

在我的 RelativeLayout 中,我动态添加了 View 。

膨胀的 xml:

<RelativeLayout --------------android:background="some transparent image">
<TextView --------- ---------/>
</RelativeLayout>

我希望我的文本颜色与背景颜色相同。我尝试了很多方法,但都没有成功。

在 iOS 中,为了实现这一点,他们使用了 RSMaskedLabel(第三方类),但我在 Android 中没有找到与此类似的东西。

我还是没有找到任何解决方案,请任何人帮助我。我尝试使用位图和 Canvas ,但对我不起作用。

enter image description here

最佳答案

关于如何使用自定义 TextView 实现此目的的一些指南:

  1. 扩展TextView组件
  2. 创建 BitmapCanvas 用于绘制背景和文本
  3. 将想要的背景颜色绘制到分配的 Canvas(例如 Color.argb(80, 255, 255, 255))
  4. 使用模式为 PorterDuffXfermode(Mode.CLEAR)Paint 绘制文本(记住:只分配 BitmapCanvas 一次)因为你将它绘制到 Bitmap
  5. Bitmap 绘制到 TextViews Canvas 中

这里是一些示例代码,可以开始使用:

public class TransparentTextView extends TextView {

private Paint mTextPaint;
private Bitmap mBitmapToDraw;

public TransparentTextView(Context context) {
super(context);

setup();
}

public TransparentTextView(Context context, AttributeSet attrs) {
super(context, attrs);

setup();
}

public TransparentTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);

setup();
}

private void setup() {
mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mTextPaint.setTextSize(getTextSize());
mTextPaint.setStyle(Paint.Style.FILL);
mTextPaint.setXfermode(new PorterDuffXfermode(Mode.CLEAR));
}

@Override
protected void onDraw(Canvas canvas) {
if (mBitmapToDraw == null) {
mBitmapToDraw = Bitmap.createBitmap(getWidth(), getHeight(),
Bitmap.Config.ARGB_8888);

if (mBitmapToDraw != null) {
Canvas c = new Canvas(mBitmapToDraw);

c.drawColor(Color.argb(80, 255, 255, 255));

c.drawText(getText().toString(), getPaddingLeft(),
getPaddingTop(), mTextPaint);
}
}

if (mBitmapToDraw != null) {
canvas.drawBitmap(mBitmapToDraw, 0, 0, null);
} else {
super.onDraw(canvas);
}
}
}

如果您动态设置文本,则需要重置 mBitmapToDraw 以使其刷新。

关于android - Android 中 Textview 的屏蔽属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20879652/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com