0

如何“设置”一个油漆来完成上面的“第二个”图像?

paint.setColor(Color.BLACK);
canvas.drawText(strValue, x, y, paint);

在此处输入图像描述

第一张图片:由于上面的代码,文本全部为黑色。

第二张图片:更好地对比背景颜色(用图形编辑器编辑,只是为了在这里说明)

请注意,“31”是部分黑色和部分白色(但它可以是与红色对比度更好的任何其他颜色,因为“36”可能是蓝色)。

4

3 回答 3

4

您可以使用PixelXorXfermode进行绘制。

于 2012-04-25T02:55:30.950 回答
1

我能想到的唯一解决方案是,首先在你的 onDraw 上,你有一个变量 Canvas ,你等于实际的,然后你画你的数字,

paint.setColor(Color.BLACK);
canvas.drawText(strValue, x, y, paint);

然后你画红色的 Rect

canvas.drawRect(myRect, redPaint);

然后你画你的线

canvas.drawline(mStartX,mStartY, mFinishX, mFinishY, myLinePaint);

在你的 onDraw 之外的最后,你调用一个像这样的方法:

public void myMethod(){
    Paint paint = new Paint();
    paint.setColor(Color.BLACK);
    this.canvas.drawText(strValue, x, y, paint);
    //here you will define the area that you will mark as dirty 
    //(wich can have the same values as your red Rect)
    Rect myRect = new Rect();
    myRect.set(x0,y0,x1,y1);
    //and finally here you invalidate ONLY the red area
    this.canvas.invalidate(myRect);
}

注意:这将要求在您的 onDraw 上验证全局 Canvas 不为空,如果是,则将您的全局等同于实际值。我不确定这是否真的有效,但这是我能想到的唯一解决方案。

于 2012-04-24T23:30:09.300 回答
0

设置 AntiAlias 时,PixelXorXfermode 不是好方法。

如果你能得到红色矩形,我认为使用 canvas.clipRect 更好。像这样

textpaint.setColor(black);
canvas.drawText(str,x,y,textpaint);

Rect oldClipRect = canvas.getClipBounds();
canvas.clipRect(rcRed,Op.REPLACE);
textpaint.setColor(white);
canvas.drawText(str,x,y,textpaint);
canvas.clipRect(oldclipRect,Op.REPLACE);
于 2012-10-28T01:31:10.833 回答