Android Studio вопросы по SurfaceView

231
05 февраля 2018, 04:51

Пишу программу, которая весь на весь экран рисует сетку квадратов. В каждом квадрате нарисована цифра "0". Когда пользователь нажимает на какой-либо квадрат, то в этом квадрате вместо "0" отображается "-1". ( Хочу использовать эту программу в дальнейшем для создания алгоритма для поиска пути ). Рисование происходит в отдельном классе унаследованном от Thread. А конкретно, в методе run рисуется сетка из квадратов, и в каждый квадрат должна рисоваться цифра. Что бы понять, какая цифра рисуется в квадрате, вне метода run создаю таблицу ( ячеек столько же сколько квадратов на экране ), в которой по стандарту все ячейки равны "0". Но вне метода run нельзя использовать методы getHight(), getWidth(), и нельзя сделать таблицу. Может кто помочь нубу, какими методами нужно создавать таблицу вне метода run?

public class DrawMap extends Thread {
private SurfaceHolder surfaceHolder;
int CellSize = 50;
int xm, ym;
int xw = CellSize; // Размеры квадрата по X
int yw = CellSize; // Размеры квадрата по Y
int finx, finy;
int[][] map;
float movex = 0;
float movey = 0;
private volatile boolean running = true;//флаг для остановки потока
{
    finx = (canvas.getWidth() / xw);  // Создание массива который содержит информацию о квадратах
    finy = (canvas.getHeight() / yw);
    map = new int[finx][finy];
    for (int i = 0; i < finx; i++) {
        for (int z = 0; z < finy; z++) {  // Заполнение массива нулями
            map[i][z] = 0;
        }
    }

}

public DrawMap(Context context, SurfaceHolder surfaceHolder) {
    this.surfaceHolder = surfaceHolder;
    }

public void requestStop() {
    running = false;
}
@Override
public void run() {
    while (running) {
        Canvas canvas = surfaceHolder.lockCanvas();
        if (canvas != null) {
            try {
                // рисование на canvas
                Paint paint = new Paint();
                paint.setColor(Color.BLUE);
                paint.setStyle(Paint.Style.STROKE);

                if (canvas.getWidth() % xw != 0) {
                    xw++;
                }
                if (canvas.getHeight() % yw != 0) {
                    yw++;
                }
                while (movex < canvas.getWidth()) {
                    canvas.drawLine(movex, 0, movex, canvas.getHeight(), paint);
                    movex += xw;
                }
                while (movey < canvas.getHeight()) {
                    canvas.drawLine(0, movey, canvas.getWidth(), movey, paint);
                    movey += yw;
                    }
            } finally {
                surfaceHolder.unlockCanvasAndPost(canvas);
            }
        }
    }
}

}

READ ALSO