复制 Paint 对象

Copy Paint object

好吧,我不知道该如何描述。我制作了一个名为 ScreenAreas 的 Class 来定义屏幕上的特定区域。稍后,我正在绘制这些 ScreenAreas。

我想做的是将 Paint 属性(Color、strokeWidth、Shaddowsettings 等)耦合到这些 ScreenAreas,这样我在绘制它们时就不必重置所有这些属性再次.

这是我的屏幕区域Class: 导入 android.graphics.Canvas; 导入 android.graphics.Paint;

public class ScreenArea {

private int xMin;
private int yMin;
private int xMax;
private int yMax;
private Paint paint;

public ScreenArea(int x1, int x2, int y1, int y2, Paint paint) {
    this.setXMin(x1);
    this.setXMax(x2);
    this.setYMin(y1);
    this.setYMax(y2);
    this.paint = paint;

}

// I removed the getters and setters for clarity

public void draw(Canvas canvas){
    canvas.drawRect(this.xMin, this.yMin, this.xMax, this.yMax, this.paint);
}
}

在我的主要 Class 中,我使用以下方法构建它们:

paint.setColor(Color.rgb(10,10,10));
area1 = new ScreenArea (
            0,
            0,
            100,
            100,
            paint);

paint.setColor(Color.rgb(100,100,100));
area2 = new ScreenArea(
            20, 
            20, 
            80, 
            80,
            paint);

当我尝试绘制它们时,我只是这样做:

area1.draw(canvas);
area2.draw(canvas);

不过,这两个区域将被赋予相同的颜色。事实上,它们被赋予了最后使用的颜色。这可能是因为 ScreenArea 中的 Paint 对象只是指向主 Class 中的同一个 Paint 对象。问题是,如何解决这个问题!

有人吗?

你应该记住Paint object has a copy constructor。所以代替:

this.paint = paint;

在您的 ScreenArea 构造函数中,您可以使用:

this.paint = new Paint(paint);

答案很好,但是如果出于某种原因你不想实例化一个新的 Paint(可能是因为你在 onDraw() 里面,我意识到这里不是这种情况) 那么你可以使用 Paint.set().

public void set (Paint src) Added in API level 1

Copy the fields from src into this paint. This is equivalent to calling get() on all of the src fields, and calling the corresponding set() methods on this.

private Paint paint; 替换为 private Paint paint = new Paint();,然后将 this.paint = paint;(仅复制指向 Paint 对象的指针)替换为 this.paint.set(paint);(复制字段从 paintthis.paint.