2012-02-18 1 views
2

Я пытаюсь работать над простым кодом в течение двух дней. Я пробовал все изменения, но никто не работает. Я пытаюсь рисовать вертикальные прямоугольники разных цветов. В первом я использую только одну переменную Rect и перемещаю координаты. Вот соответствующая часть кода.Android 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

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

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

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

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

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

Серьезно, я не мог поверить, что это была ошибка, которую я совершил. Теперь я изменил координату максимальной ширины на * (j + 1). В настоящее время работает код без массива, но код с массивом все еще вызывает проблемы. Он бросает исключение NullPointerException в строке myRect [j] .set (....); Я создал объекты myRect [5] и myCanvas. Пожалуйста, помогите мне снова. Невозможно определить массивы в Rect? – user1190882

1

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

+0

Серьезно, я не мог поверить, что была ошибка, которую я сделал. Теперь я изменил координату максимальной ширины на * (j + 1). В настоящее время работает код без массива, но код с массивом все еще вызывает проблемы. Он бросает исключение NullPointerException в строке myRect [j] .set (....); Я создал объекты myRect [5] и myCanvas. Пожалуйста, помогите мне снова. Невозможно определить массивы в Rect? – user1190882

+0

Можно использовать массив Rect, но вы используете индекс, который находится за пределами диапазона массива. –

0

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

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

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

+0

Серьезно, я не мог поверить, что это была ошибка, которую я совершил. Теперь я изменил координату максимальной ширины на * (j + 1). В настоящее время работает код без массива, но код с массивом все еще вызывает проблемы. Он бросает исключение NullPointerException в строке myRect [j] .set (....); Я создал объекты myRect [5] и myCanvas. Пожалуйста, помогите мне снова. Невозможно определить массивы в Rect? – user1190882

+0

Вы создали массив из 5 'Rect', но массив содержит только элементы 'null'. Первая строка внутри цикла должна быть 'myRect [j] = new Rect();'. –

0

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

myRect[j] = new Rect() 

перед тем

myRect[j].set(myCanvas.getWidth()/5*j, 0, myCanvas.getWidth()/5*j, myCanvas.getHeight()); 

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

  • Нет связанных вопросов^_^