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

Android 更新画布,保留旧画布详细信息,android,persistence,android-canvas,Android,Persistence,Android Canvas,大家好,我正在用android开发一个游戏,为此我使用canvas.drawRect()方法绘制了8*8个矩形,现在我需要的是当用户触摸任何矩形时,它的颜色必须改变。为此,我做了如下工作 public boolean onTouchEvent(final MotionEvent event) { handleTouches(event.getX(), event.getY()); return false; } public void handleT

大家好,我正在用android开发一个游戏,为此我使用canvas.drawRect()方法绘制了8*8个矩形,现在我需要的是当用户触摸任何矩形时,它的颜色必须改变。为此,我做了如下工作

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);
                }
            }
}
public boolean onTouchEvent(最终运动事件){
handleTouches(event.getX(),event.getY());
返回false;
}
公共无效手触(浮动x、浮动y){
xLocTouch=(int)x;
yLocTouched=(int)y;
outerLoop:for(int i=0;i<8;i++){
对于(int j=0;j<8;j++){
if(GameView.tiles[i][j].rect.contains(xLocTouch,lyoctouched)){
触摸=真实;
xTouched=i;
yTouched=j;
断开外环;
}
}
}
}
受保护的void onDraw(画布){
对于(int i=0;i

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

一个跟踪每个矩形触摸状态的布尔数组就可以了。我看不到文本但这可能是GameView类中的一个附加字段,并在handleTouches方法中进行适当更新

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