开发者

How to make an array or arraylist of Rect

开发者 https://www.devze.com 2023-03-07 23:26 出处:网络
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).

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!!!


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

}


With each call to View.onDraw you create a new fire and add it to your list. Then you iterate over all fires and draw them. So you get more and more fires. Do all fires move the same way or is there some random component? It might be that you don't see the previous locations of one fire, but that there are many fires moving on the same path.

Do you want to have 1 fire moving around or more and more fires moving around independently?

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号