gpt4 book ai didi

java - 复制 Paint 对象

转载 作者:太空宇宙 更新时间:2023-11-03 12:16:44 25 4
gpt4 key购买 nike

好吧,我不确定如何描述这个。我制作了一个名为 ScreenAreas 的类,用于定义屏幕上的特定区域。稍后,我正在绘制这些 ScreenAreas。

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

这是我的 ScreenArea 类: 导入 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);
}
}

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

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 对象只是指向主类中的同一个 Paint 对象。问题是,如何解决这个问题!

有人吗?

最佳答案

你应该记住 Paint对象有一个 copy constructor .所以不是:

this.paint = paint;

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

this.paint = new Paint(paint);

关于java - 复制 Paint 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32426044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com