Search code examples
androidrect

How to make an array or arraylist of Rect


I am going crazy trying to figure this out. I am trying to make an array or arraylist of Rect (rectangles) that I can update the coordinates and draw on the screen(to make them move).

Right now I have a separate class called Fire in which I make a new rectangle each iteration with the new coordinates in its own onDraw() method. In the View's onDraw() method's first iteration I add a new Fire to an arraylist.

In the Fire class I have:

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

In the View class I have:

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);
    }
}

I got rid of pointless parts of code, but this is the important stuff. The Rectangle prints, however it prints all the previous locations as well and I don't understand why. I have been trying to fix this forever and any help you guys could give would be greatly appreciated. I was able to implement this in java easy, but android is giving me problems.

Thanks in advance!!!


Solution

  • From the code, you are adding new rectangles to the list, and then drawing each rectangle. But from the description, it seems that you just want to draw a single rectangle, with updated coordinates.

    Instead of creating a new Rect each time, reuse a rectangle and update its coordinates with set(...).

    A second problem is that you set i=0 and then immediately check for i==0, which would be always true. Try something like this instead:

    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);
    
    }