Android Rect не работает - PullRequest
       4

Android Rect не работает

2 голосов
/ 18 февраля 2012

Я уже два дня пытаюсь работать над простым кодом.Я перепробовал все изменения, но ни одна из них не работает.Я пытаюсь нарисовать вертикальные прямоугольники разными цветами.В первом я использую только одну переменную Rect и перемещаю координаты.Вот соответствующая часть кода.

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

Другое изменение, которое я пробовал, было через массив.Вот код.

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

Может кто-нибудь, пожалуйста, помогите мне, в чем проблема на самом деле?

Ответы [ 4 ]

5 голосов
/ 18 февраля 2012

Первое, что кажется явно неправильным (может быть и больше):

  • Минимальная x-координата вашего прямоугольника - myCanvas.getWidth () / 5 * j
  • Максимальная x-координата вашего прямоугольника - myCanvas.getWidth () / 5 * j

Они оба имеют одинаковое значение, поэтому ваш прямоугольник вырожден.

Оффтоп, но очень актуально : всякий раз, когда вы сталкиваетесь с такой проблемой, вам нужно разбить ее на более мелкие части, пока вы не заставите ее что-то . Это поможет вам понять, что не так:

  1. Извлечение всех подвыражений (таких как цвет и сгенерированные значения x / y) в локальные переменные, чтобы их можно было легко проверить в отладчике
  2. Заменить случайный цвет на заранее определенный цвет (COLOR.YELLOW), чтобы исключить случайный элемент
  3. Замените рассчитанный прямоугольник на фиксированный прямоугольник (скажем, (10,10) - (20,20)), чтобы исключить вычисления координат.
  4. Заменить цикл, чтобы исключить цикл.
1 голос
/ 18 февраля 2012

Ваш прямоугольник имеет ширину 0px.Параметры функции set () по порядку: левый / верхний / правый / нижний.Вы используете одно и то же значение для левого и правого каналов, поэтому ширина (правый-левый) = 0.

0 голосов
/ 03 марта 2017

Добавить эту строку

myRect[j] = new Rect() 

до

myRect[j].set(myCanvas.getWidth()/5*j, 0, myCanvas.getWidth()/5*j, myCanvas.getHeight());
0 голосов
/ 18 февраля 2012

Давайте посмотрим ваши координаты, сначала:

myRect1.set(myCanvas.getWidth()/5*j, 0, myCanvas.getWidth()/5*j, myCanvas.getHeight());

Верхний левый угол имеет ту же координату х, что и нижний правый угол, поэтому вы рисуете прямоугольник с шириной 0.

...