i'm struggling with this for a while, not sure if because almost 2 years of absence in Android DEV or my stupidity, I've tried everything and just cannot redraw my screen even if invalidate() is happening. Here's some code:
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);
            }
So basically, when We swipe to the top, position is being changed by movePlayer (decreasing y in 2d array). Then, every rectangle on screen is being redrawn (whole screen has only rectangles which are drawn with different colors according to array line by line, doesn't matter I suppose). My variables are changing properly, so invalidate() is firing onDraw(), however there's no change on the screen. Any help much appreciated.