我的scrollView
中有一个Activity
,scrollView
的背景有多种颜色。
<ScrollView ---------->
<RelativeLayout -------------/>
</ScrollView>
我的RelativeLayout
动态添加了视图。
膨胀的xml:
<RelativeLayout --------------android:background="some transparent image">
<TextView --------- ---------/>
</RelativeLayout>
我希望我的文字颜色与背景颜色相同。我曾在很多方面尝试过该解决方案,但未能成功。
在iOS中,为了达到这个目的,他们使用了RSMaskedLabel
(第三方类),但我在Android中找不到与此类似的内容。
我仍然没有找到任何解决方案,任何人都可以帮助我。我尝试使用Bitmaps和Canvas,但没有为我工作。
答案 0 :(得分:1)
有关如何使用自定义TextView
实现此目的的一些指导原则:
TextView
组件Bitmap
和Canvas
,用于绘制背景和文字Canvas
(例如Color.argb(80, 255, 255, 255)
)Paint
的{{1}}绘制文字(请记住:只分配PorterDuffXfermode(Mode.CLEAR)
和Bitmap
一次),因为您将其绘制到Canvas
Bitmap
绘制到Bitmap
画布以下是一些示例代码:
TextViews
如果您要动态设置文字,则需要重置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);
}
}
}
才能刷新文字。