0

我要疯了,想弄清楚这一点。我正在尝试创建一个 Rect (矩形)数组或数组列表,我可以更新坐标并在屏幕上绘制(使它们移动)。

现在,我有一个名为 Fire 的单独类,其中我在每次迭代时使用其自己的 onDraw() 方法中的新坐标创建一个新矩形。在 View 的 onDraw() 方法的第一次迭代中,我将一个新的 Fire 添加到一个数组列表中。

在 Fire 课上,我有:

public void onDraw(Canvas canvas){
    moveF();
    Rect r = new Rect(_l,_t,_r,_b);
    canvas.drawRect(r, paint);
}

在 View 类中,我有:

protected void onDraw(Canvas canvas) {
    int i = 0;
    canvas.drawColor(Color.WHITE);
    if(i==0){
        fires.add(new Fire(20,100,40,120));
        i++;
    }
    for(Fire fire : fires){
        fire.onDraw(canvas);
    }
}

我摆脱了无意义的代码部分,但这是重要的东西。矩形打印,但是它也打印所有以前的位置,我不明白为什么。我一直在努力解决这个问题,你们可以提供的任何帮助将不胜感激。我能够在java中轻松实现这一点,但是android给我带来了问题。

提前致谢!!!

4

2 回答 2

0

从代码中,您将新矩形添加到列表中,然后绘制每个矩形。但从描述来看,您似乎只想绘制一个带有更新坐标的矩形。

不要每次都创建一个新的 Rect,而是重用一个矩形并用set(...).

第二个问题是您设置i=0然后立即检查i==0,这总是正确的。尝试这样的事情:

static final Rect rect = new Rect();

// your code here

protected void onDraw(Canvas canvas) {
    canvas.drawColor(Color.WHITE);

    moveF();
    rect.set(_l,_t,_r,_b);
    canvas.drawRect(rect, paint);

}
于 2011-05-24T20:24:47.267 回答
-1

每次调用 View.onDraw 时,您都会创建一个新火并将其添加到您的列表中。然后你遍历所有的火并绘制它们。所以你会得到越来越多的火灾。所有的火都以相同的方式移动还是有一些随机的成分?可能是您看不到一场火灾的先前位置,但有许多火灾在同一条路径上移动。

你想有 1 个火在四处移动还是越来越多的火独立移动?

于 2011-05-24T20:22:35.777 回答