2013-12-09 4 views
2

Я пытаюсь сделать нестандартный просмотр для Android. Мне нужен большой ractangle, который содержит 7 других прямоугольников (одинаково разнесенных и дополненных изнутри основного прямоугольника, представляющих дни недели). С моим текущим кодом, я получаю следующий результат:Рисование прямоугольников одинакового размера внутри прямоугольника

enter image description here

Но то, что я ищу должно быть (отношение не имеет значения до тех пор, как пространства равны):

enter image description here

Вот мой код. Любая помощь и предложение будут оцениваться!

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 

    //Main rectangle 
    Rect boxMain = new Rect(); 
    boxMain.set(getLeft() + 25, getTop() + 25, getRight() - 25, getBottom() - 25); 

    int hMiniBox = boxMain.height()/7; //height for each of 7 rectangles 
    int space = 10; //Space between each rectangle inside the main rectangle 
    int rectH = hMiniBox; //Height of each rectangle 

    //Draw the main rectangle 
    canvas.drawRect(boxMain, _paintProgressBoxBorder); 

    //Draw 7 rectangles inside main rectangle 
    for(int i = 0; i <7; i++) 
    { 
     Rect rect = new Rect(); 
     rect.set(
       boxMain.left + space, 
       boxMain.top + space, 
       boxMain.right - space, 
       rectH 
     ); 

     canvas.drawRect(rect, _paintProgressMiniBoxesBorder); 
     rectH += hMiniBox; 
    } 
    invalidate(); 
} 
+0

Вы не двигаетесь верхние углы каждого прямоугольника вниз. Вы просто делаете каждый следующий прямоугольник выше. – mbeckish

ответ

2

Когда вы Переберите установки небольшого прямоугольника, вы установите верхние как boxMain.top + space каждый раз, и только увеличиваете дно. Так что вы действительно рисуете 7 прямоугольников поверх друг друга, но каждый раз увеличиваете их.

попробовать что-то вроде следующего:

int smallRectTop = 0 
for(int i = 0; i <7; i++) { 
    Rect rect = new Rect(); 
    rect.set(
     boxMain.left + space, 
     smallRectTop + space, 
     boxMain.right - space, 
     smallRectTop += hMiniBox; // Increment and set rect.bottom at the same time 
    ); 

} 
+0

Можете ли вы сказать мне, пожалуйста, что я должен был изменить? Я пробовал некоторые изменения, но я получаю только вялые результаты. –

+0

ОК отредактирует мой ответ –

Смежные вопросы