invalidate() не обновляет View
Я борюсь с этим некоторое время, не уверен, что из-за почти 2-х лет отсутствия в Android DEV или моей глупости я перепробовал все и просто не могу перерисовать мой экран, даже если происходит invalidate(). Вот некоторый код:
GameActivity.java
onCreate
...
final CanvasActivity mCanvasActivity = new CanvasActivity(this);
setContentView(mCanvasActivity);
mCanvasActivity.setOnTouchListener(new OnSwipeTouchListener(this) {
@Override
public void onSwipeTop() {
tilesArray[playerPositionY][playerPositionX] = 0;
playerPositionY--;
tilesArray[playerPositionY][playerPositionX] = 2;
mCanvasActivity.invalidate();
}
CanvasActivity.java
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
movePlayer(canvas);
Log.e("player", "x " + playerPositionX + " y " + playerPositionY);
}
movePlayer
if (currentBlock == 0) {
canvas.drawRect(posLeft, posTop, posRight, posBottom, paintWall);
} else if (currentBlock == 1) {
canvas.drawRect(posLeft, posTop, posRight, posBottom, paintLabirynth);
} else if (currentBlock == 3) {
canvas.drawRect(posLeft, posTop, posRight, posBottom, paintExit);
} else {
canvas.drawRect(posLeft, posTop, posRight, posBottom, paintCharacter);
}
Таким образом, в основном, когда мы проводим вверх, позиция изменяется с помощью movePlayer (уменьшая y в 2d массиве). Затем каждый прямоугольник на экране перерисовывается (весь экран содержит только прямоугольники, которые нарисованы разными цветами в соответствии с массивом строка за строкой, не имеет значения, я полагаю). Мои переменные меняются правильно, поэтому invalidate() запускает onDraw(), однако на экране ничего не меняется. Любая помощь высоко ценится.
1 ответ
Похоже, я не сбрасывал paintY в 0 при каждом вызове onDraw, и он рисовал правильно, но под экраном. Как я уже сказал, может быть, и была моя глупость:).