Android 更新画布,保留旧画布详细信息
大家好,我正在用android开发一个游戏,为此我使用canvas.drawRect()方法绘制了8*8个矩形,现在我需要的是当用户触摸任何矩形时,它的颜色必须改变。为此,我做了如下工作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
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中设置矩形的颜色。您可以使用获得触摸像素的颜色,但需要事先警告,您必须先将画布转换为位图,以便对颜色进行采样(因此效率低下)