如何制作Rect的数组或arraylist

时间:2011-05-24 20:13:57

标签: android rect

我疯狂地试图解决这个问题。我正在尝试制作一个Rect(矩形)的数组或arraylist,我可以更新坐标并在屏幕上绘图(使它们移动)。

现在我有一个名为Fire的单独类,其中我在每次迭代时使用自己的onDraw()方法中的新坐标创建一个新矩形。在View的onDraw()方法的第一次迭代中,我向一个arraylist添加了一个新的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给了我一些问题。

提前致谢!!!

2 个答案:

答案 0 :(得分: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);

}

答案 1 :(得分:-1)

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

你是想让一场火势四处移动,还是越来越多的火灾独立移动?