一些指南如何通过 custom 实现这一点TextView
:
- 扩展
TextView
组件
- 创建
Bitmap
和Canvas
绘制背景和文本的位置
- 将想要的背景颜色绘制到分配中
Canvas
(例如Color.argb(80, 255, 255, 255)
)
Paint
使用具有模式绘制文本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);
}
}
}
如果您正在动态设置文本,则需要重置mBitmapToDraw
以使其刷新。