如何“设置”油漆以完成上面的“第二”图像?
paint.setColor(Color.BLACK);
canvas.drawText(strValue, x, y, paint);
第一张图片:由于上述代码的结果,所有文字均为黑色。
第二张图片:更好的背景颜色(用图形编辑器编辑,仅用于说明)
请注意,“31”部分为黑色且部分为白色(但可能是任何其他颜色与红色形成鲜明对比,因为“36”可能为蓝色)。
答案 0 :(得分:4)
您可以使用PixelXorXfermode进行绘制。
答案 1 :(得分:1)
我能想到的唯一解决方案是,首先在onDraw上你有一个变量Canvas,它等于实际的那个,然后你绘制你的数字,
paint.setColor(Color.BLACK);
canvas.drawText(strValue, x, y, paint);
然后你绘制红色矩形
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不为null 如果是这样,那么你将全局与实际相等。 我不确定这是否真的有效,但是我能想到的唯一解决方案。
答案 2 :(得分: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);