首页 > 解决方案 > Android Canvas 保存不同颜色的油漆

问题描述

我有一个小问题,我正在尝试制作油漆,到目前为止一切都很好,但是,我的问题是,当你想用不同的颜色绘制时,我之前用一种颜色绘制的颜色会变成相同的颜色,试着按照一个例子如何解决这个,但在我的情况下,我有一个网格,我不太清楚如何应用它,希望你能帮助我,谢谢。

这是我的drawClass

公共类 AreaDraw 扩展视图 {

private Path mPath;
private int numColumns, numRows;
private int cellWidth, cellHeight;
private Paint paint = new Paint();
private boolean[][] cellChecked;
public static int colorPen = Color.BLACK;
private int currentColor;
private ArrayList<Path> paths = new ArrayList<>();

public AreaDraw(Context context){
    super(context);
}

public AreaDraw(Context context, AttributeSet attrs){
    super(context, attrs);
    paint.setStyle(Paint.Style.FILL_AND_STROKE);
}

public void setNumColumns(int columns) {
    this.numColumns = columns;
    calculateDimensions();
}

public int getNumColumns() {
    return numColumns;
}

public void setNumRows(int rows) {
    this.numRows = rows;
    calculateDimensions();
}

public int getNumRows() {
    return numRows;
}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    calculateDimensions();
}

private void calculateDimensions() {
    if (numColumns < 1 || numRows < 1) {
        return;
    }

    cellWidth = getWidth() / numColumns;
    cellHeight = getHeight() / numRows;

    cellChecked = new boolean[numColumns][numRows];

    invalidate();
}

@Override
protected void onDraw(Canvas canvas) {
    canvas.save();
    canvas.drawColor(Color.WHITE);

    if (numColumns == 0 || numRows == 0) {
        return;
    }

    int width = getWidth();
    int height = getHeight();

    for (int i = 0; i < numColumns; i++) {
        for (int j = 0; j < numRows; j++) {
            if (cellChecked[i][j]) {
                canvas.drawRect(i * cellWidth, j * cellHeight, (i + 1) * cellWidth, (j + 1) * cellHeight, paint);
                Toast.makeText(getContext(), "dibujo", Toast.LENGTH_SHORT).show();
            }
        }
    }

    for (int i = 1; i < numColumns; i++) {
        canvas.drawLine(i * cellWidth, 0, i * cellWidth, height, paint);
        paint.setColor(Color.BLACK);
    }

    for (int i = 1; i < numRows; i++) {
        canvas.drawLine(0, i * cellHeight, width, i * cellHeight, paint);
        paint.setColor(Color.BLACK);
    }


}

@Override
public boolean onTouchEvent(MotionEvent event) {
    switch(event.getAction()){
        case MotionEvent.ACTION_DOWN:
            pen(event);
            break;
        case MotionEvent.ACTION_MOVE:
            break;
        case MotionEvent.ACTION_UP:
            break;
    }
    return true;
}

//Erase
public void erase(){
    colorPen = Color.WHITE;
    setColor();
    paint.setColor(currentColor);
}

//Paint
public void pen(MotionEvent event){
    

    int column = (int) (event.getX() / cellWidth);
    int row = (int) (event.getY() / cellHeight);

    setColor();
    paint.setColor(currentColor);

    cellChecked[column][row] = !cellChecked[0][0];
    Toast.makeText(getContext(), "dibujoPen", Toast.LENGTH_SHORT).show();

    invalidate();
}

public int setColor(){
    currentColor = colorPen;
    return currentColor;
}

//Set Colors
public void blackColor(){
    colorPen = Color.BLACK;
}

public void redColor(){
    colorPen = Color.RED;
}

public void greenColor(){
    colorPen = Color.GREEN;
}

public void yellowColor(){
    colorPen = Color.YELLOW;
}

public void blueColor(){
    colorPen = Color.BLUE;
}

public void magentaColor(){
    colorPen = Color.MAGENTA;
}

public void cyanColor(){
    colorPen = Color.CYAN;
}

public void whiteColor(){
    colorPen = Color.WHITE;
}

}` 在此处输入图片描述

标签: androidcanvaspaint

解决方案


推荐阅读