Search code examples
androidarraysrect

Android Rect not working


I have been trying to work on a simple code for two days now. I have tried all alterations but none seems to be working. I am trying to draw vertical rectangles with different colors. In the first one, I am using only one Rect variable and moving the coordinates. Here is the relevant part of the code.

 Rect myRect1=new Rect();
 Random colorMe=new Random();
for(int j=0;j<5;j++){
    myRect1.set(myCanvas.getWidth()/5*j, 0, myCanvas.getWidth()/5*j, myCanvas.getHeight());
    paint.setColor(Color.rgb(colorMe.nextInt(255), colorMe.nextInt(255), colorMe.nextInt(255)));
    myCanvas.drawRect(myRect1, paint);
}

Other alteration which I tried was through an array. Here is the code.

 Rect[] myRect=new Rect[5];
 Random colorMe=new Random();
for(int j=0;j<5;j++){
    myRect[j].set(myCanvas.getWidth()/5*j, 0, myCanvas.getWidth()/5*j, myCanvas.getHeight());
    paint.setColor(Color.rgb(colorMe.nextInt(255), colorMe.nextInt(255), colorMe.nextInt(255)));
    myCanvas.drawRect(myRect[j], paint);
}

Can somebody please help me what is the problem actually there?


Solution

  • The first thing that seems obviously wrong (there might be more):

    • The minimum x-coordinate of your rectangle is myCanvas.getWidth()/5*j
    • The maximum x-coordinate of your rectangle is myCanvas.getWidth()/5*j

    They are both the same value, so your rectangle is degenerate.

    Offtopic, but very relevant: whenever you run into a problem like this, you need to break it down into smaller parts until you get it to do something. This will help you understand what's wrong:

    1. Extract all subexpressions (like the color, and the generated x/y values) into local variables so you can easily inspect them in the debugger
    2. Replace the random color by a predefined color (COLOR.YELLOW), to rule out the random element
    3. Replace the caclulated rectangle by a fixed rectangle (say (10,10) - (20,20)) to rule out the coordinate calculations.
    4. Replace the loop, to rule out the loop.