繁体   English   中英

invalidate()不会刷新视图

[英]invalidate() doesn't refresh View

我为此苦苦了一段时间,不确定是因为Android DEV缺席了将近2年还是我的愚蠢,我已经尝试了所有方法,即使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更改(在2d数组中减少y)。 然后,屏幕上的每个矩形都将被重绘(整个屏幕上只有根据阵列逐行用不同颜色绘制的矩形,我想这没关系)。 我的变量正确更改,因此invalidate()会触发onDraw(),但是屏幕上没有任何变化。 任何帮助,不胜感激。

看起来我没有在每个onDraw调用中将paintY重置为0,并且它正在正确绘制,但是在屏幕下方。 就像我说的那样,过去可能是我的愚蠢:)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM