更新画布保留旧画布详细信息

时间:2014-11-30 04:46:30

标签: android persistence android-canvas

您好我在android中开发游戏,因为我使用canvas.drawRect()方法绘制8 * 8矩形,现在我需要的是当用户触摸任何rect时,其颜色必须更改。为此,我做了如下。

public boolean onTouchEvent(final MotionEvent event) {

        handleTouches(event.getX(), event.getY());

        return false;
    }

public void handleTouches(float x, float y) {
        xLocTouch = (int) x;
        yLocTouched = (int) y;
        outerLoop: for (int i = 0; i < 8; i++) {
            for (int j = 0; j < 8; j++) {
                if (GameView.tiles[i][j].rect.contains(xLocTouch, yLocTouched)) {
                    touched = true;
                    xTouched = i;
                    yTouched = j;
                    break outerLoop;
                }

            }
        }

    }

protected void onDraw(Canvas canvas) {

for (int i = 0; i < ROWS; i++) {
            for (int j = 0; j < COLS; j++) {
                canvas.drawRect(tiles[i][j].rect, paint);
                canvas.drawRect(tiles[i][j].rect, p);
                if(touched && i==xTouched && j == yTouched) {
                    Paint touchedColor = new Paint();
                    touchedColor.setColor(Color.BLUE);
                    canvas.drawRect(tiles[i][j].rect, touchedColor);
                }
            }
}

此代码工作正常,但问题是当我第一次触摸rect的颜色变化时,但是对于第二次触摸它会擦除旧触摸位置。我需要将所有触摸的矩形保持为不同的颜色。有什么办法吗?

1 个答案:

答案 0 :(得分:1)

跟踪每个矩形的触摸状态的布尔数组可以解决问题。我无法看到外部代码,但这可能是GameView类中的一个附加字段,并在handleTouches方法中进行了适当更新。

如果它已经是Color.BLUE(适当地修改你的if语句),那么可能效率较低,不太优雅的解决方案就是不在onDraw中设置矩形的颜色。您可以使用this SE answer获取触摸的像素的颜色,但要预先警告您必须先将画布转换为位图以便对颜色进行采样(因此效率低下)。