invalidate()不刷新View

时间:2018-02-12 21:06:15

标签: android ondraw invalidation setcontentview android-view-invalidate

我已经挣扎了一段时间,不确定是因为因为Android DEV中差不多2年或者我的愚蠢,我已经尝试了所有内容,即使invalidate()是无效的,也无法重绘我的屏幕发生。这是一些代码:

GameActivity.java

column

CanvasActivity.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();

        }

movePlayer

protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    movePlayer(canvas);
    Log.e("player", "x " + playerPositionX + " y " + playerPositionY);
}

所以基本上,当我们向上滑动时,movePlayer会改变位置(在2d数组中减少y)。然后,屏幕上的每个矩形都被重绘(整个屏幕只有矩形,根据阵列逐行绘制不同的颜色,我认为并不重要)。我的变量正在改变,因此invalidate()触发onDraw(),但屏幕上没有变化。任何帮助非常感谢。

1 个答案:

答案 0 :(得分:0)

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