您好我在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的颜色变化时,但是对于第二次触摸它会擦除旧触摸位置。我需要将所有触摸的矩形保持为不同的颜色。有什么办法吗?
答案 0 :(得分:1)
跟踪每个矩形的触摸状态的布尔数组可以解决问题。我无法看到外部代码,但这可能是GameView类中的一个附加字段,并在handleTouches方法中进行了适当更新。
如果它已经是Color.BLUE(适当地修改你的if语句),那么可能效率较低,不太优雅的解决方案就是不在onDraw中设置矩形的颜色。您可以使用this SE answer获取触摸的像素的颜色,但要预先警告您必须先将画布转换为位图以便对颜色进行采样(因此效率低下)。