第二次油漆覆盖第一次油漆

Second paint overrides first paint

我有两种颜料并将它们的颜色设置为不同的颜色。问题是第二个油漆覆盖了第一个油漆。

这是我的代码:

public class Score {
    static Globals g = Globals.getInstance();
    private Rect bounds = new Rect();
    private Paint paintBG = new Paint();
    private Paint paintFG = new Paint();
    private int mid;

    public Score(Paint paint) {
        this.paintBG = paint;
        this.paintFG = paint;

        // PROBLEME 
        paintBG.setColor(Color.GRAY);
        paintFG.setColor(Color.WHITE); // <-- this paint overrides the paint before
    }

    public void draw(Canvas canvas) {
        String score = String.valueOf(g.getScore());
        paintFG.getTextBounds(score, 0, score.length(), bounds);
        mid = (canvas.getWidth() / 2) - (bounds.width() / 2);

        // different "paints" but the same color
        canvas.drawText(score, mid, 60, paintBG);
        canvas.drawText(score, mid, 50, paintFG);
    }
}

来自德国的问候。 :)

这是意料之中的。两种绘画都引用同一个 Paint 对象,即作为参数传递的对象。所以基本上,对 setColor 的两次调用都在修改同一个对象,最后一个是坚持的那个!

真棒!

amahfouz 已经解释了这个问题。解决该问题的一种方法是使用 Paint 的复制构造函数。

public Score(Paint paint) {
    paintBG = new Paint(paint);
    paintFG = new Paint(paint);
    paintBG.setColor(Color.GRAY);
    paintFG.setColor(Color.WHITE);
}