如何在android studio中修复调色板?

gcuhipw9  于 2023-03-16  发布在  Android
关注(0)|答案(1)|浏览(142)

我目前正在做一个项目,人们可以在同一屏幕的两个部分画画。现在的主要问题是,当我画了一些东西,然后决定改变为不同的颜色时,所有东西都会改变为我选择的相同颜色。
这是当前代码:

@Override
    protected void onDraw(Canvas canvas) {
        for (int i = 0; i < pathList1.size(); i++) {
            int colorIndex = i % colorList1.size(); // select a color from the colorList based on i index
            paint_brush.setColor(colorList1.get(colorIndex));
            canvas.drawPath(pathList1.get(i), paint_brush);
        }
        invalidate();
    }

有人能帮我吗?我敢肯定这是一些简单的东西,我错过了,但不知道是什么。
我在ChatGPT上试过这个:

private int lastColorIndex = -1; // initialize with an invalid index

@Override
protected void onDraw(Canvas canvas) {
    for (int i = 0; i < pathList1.size(); i++) {
        int colorIndex = (lastColorIndex + 1) % colorList1.size(); // select a color from the colorList that is different from the last color
        paint_brush.setColor(colorList1.get(colorIndex));
        canvas.drawPath(pathList1.get(i), paint_brush);
        lastColorIndex = colorIndex; // update the last color index
    }
}

但不知怎么的反而更糟了?颜色一点都没变。

czfnxgou

czfnxgou1#

不要在ChatGPT的代码上浪费时间,它还不够先进,所以它只会在有细微bug的代码上浪费你的时间。
您不仅需要存储路径,还需要存储这些路径的颜色。
因此创建一个 Package 器类:

class DrawnPath {
    final Path path;
    final int colorIndex;

    DrawnPath(Path path, int colorIndex) {
        this.path = path;
        this.colorIndex = colorIndex;
    }
}

pathList1(我假设还有pathList2)从List<Path>更改为List<DrawnPath>,当用户绘制新路径时,使用当前颜色索引将其放入此 Package 器类的示例中。

//some member variable:
private int currentColorIndex1; // for user number 1

// when user number 1 touches down to begin drawing:
currentColorIndex1 = (currentColorIndex1 + 1) % colorList1.size();

当你画它的时候,用每个路径包裹的颜色,并且为了简单使用一个for-each循环。

@Override
protected void onDraw(Canvas canvas) {
    for (DrawnPath drawnPath : pathList1) {
        paint_brush.setColor(colorList1.get(drawnPath.colorIndex));
        canvas.drawPath(drawnPath.path, paint_brush);
    }
    invalidate();
}

相关问题