画布上有透明文字

时间:2013-11-11 16:48:10

标签: android canvas

我试图在图片中看到以下内容,但是我想要一个白色方块而不是那个黑色方块:

enter image description here

到目前为止,这是我的代码:

public class SmallWhiteThing extends View {

Context context;

Paint paint = new Paint();

// CONSTRUCTOR
public SmallWhiteThing(Context context) {
    super(context);
    setFocusable(true);
}

public SmallWhiteThing(Context context, AttributeSet attrs)
{
    super(context, attrs);
    this.context = context;
}

public SmallWhiteThing(Context context, AttributeSet attrs, int defStyle)
{
    super(context, attrs, defStyle);
    this.context = context;
}

@Override
protected void onDraw(Canvas canvas) {

    Paint paint = new Paint();
    BitmapFactory.Options options = new BitmapFactory.Options();  
    options.inPreferredConfig = Bitmap.Config.ARGB_8888;

    Bitmap b = Bitmap.createBitmap(120, 120, Bitmap.Config.ALPHA_8);
    Canvas c = new Canvas(b);   
    c.drawColor(Color.WHITE);

    paint.setStrokeWidth(0);
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
    paint.setTextSize(40);
    paint.setAntiAlias(true);

    c.drawText("Hello", 30, 30, paint);

    canvas.drawBitmap(b, 140, 270, paint);
}

}

我试过,你可以看到这个: c.drawColor(Color.WHITE); 但没有任何运气。

提示非常感谢。

我正在尝试别的东西,而且我得到了这个: enter image description here

代码:

Bitmap b = Bitmap.createBitmap(120, 120, Bitmap.Config.ALPHA_8);

    Canvas c = new Canvas(b);   
    c.drawColor(Color.WHITE);
    paint.setColor(Color.WHITE);
    paint.setStrokeWidth(0f);
    c.drawRect(0, 0, 150, 150, paint);

    canvas.drawBitmap(b, 100, 100, paint);

    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
    paint.setTextSize(40);
    paint.setAntiAlias(true);
    paint.setColor(Color.WHITE);
    canvas.drawText("Helloo", 100, 200, paint);

1 个答案:

答案 0 :(得分:3)

无论谁需要它。这是有效的:

当前用法(在屏幕中填充图像视图):

//Params: Text, textSize
createBlabla("Text to show", 35);


public void createBlabla(String text, int fontSize){        
    int paddingRight = 10;
    int paddingLeft = 5;
    int paddingBottom = 5;

    //Paint config
    Paint paint = new Paint();
    paint.setTextSize(fontSize);
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OUT));
    paint.setAntiAlias(true);

    Bitmap largeWhiteBitmap = Bitmap.createBitmap((int) paint.measureText(text) + paddingRight, fontSize + paddingRight, Bitmap.Config.ARGB_8888);

    Canvas canvas = new Canvas(largeWhiteBitmap);
    canvas.drawColor(Color.WHITE); 

    canvas.drawText(text, paddingLeft, fontSize, paint);

    ImageView imv = (ImageView)MainActivity.this.findViewById(R.id.imageView1);
    imv.setImageBitmap(largeWhiteBitmap);
}

enter image description here

请注意,您在屏幕中看到的是整个相对布局,中间是imageView。此imageview使用前面的代码将Bitmap作为Image获取。 relativeLayout有绿色背景。