ANDROID: Мой пользовательский вид не полностью раскрашен - PullRequest
1 голос
/ 21 декабря 2010

Я создал класс, расширяющий View, и это метод onDraw. Программа создает лабиринт, и для получения нужного значения высоты и ширины мне нужно было вызвать их в методе onDraw (в противном случае он просто возвращает 0 для обоих). Это может быть то, что все портит. Тем не менее, он получает правильную высоту на основе расстояния между видимыми квадратами в разрезе вида, который окрашен.

Часть вида, которая выглядит неокрашенной, имеет размер контекстного меню и не соответствует запасным частям. Я искал других людей, имеющих эту проблему, и кажется, что никто другой не имеет этой проблемы, и, насколько я могу судить, я не делаю ничего особенно отличного от них. Если у меня есть какие-либо другие идеи, пожалуйста, дайте мне знать.

Я пока не могу публиковать фотографии, потому что я новичок во всем этом стековом переполнении = ( Таким образом я попытался объяснить это явление как можно лучше.

Спасибо!

@Override
 public void onDraw(Canvas canvas) {
  if(firstRun){
  width = getMeasuredWidth();
  height = getMeasuredHeight();
  MazeMake();
  invalidate();
 }else
  for (int i = 0; i < c; i++)
   for (int j = 0; j < r; j++) {
    grid[i][j].paintSq(canvas);
   }
 }

@Override
 protected void onMeasure(int wMeasureSpec, int hMeasureSpec) {
  int measuredHeight = measure(hMeasureSpec);
  int measuredWidth = measure(wMeasureSpec);
  setMeasuredDimension(measuredHeight, measuredWidth);
 }

private int measure(int measureSpec) {
 int specMode = MeasureSpec.getMode(measureSpec);
 int specSize = MeasureSpec.getSize(measureSpec);
 if (specMode == MeasureSpec.UNSPECIFIED)
   return 500;
 else {
   return specSize;
 }
}

Ответы [ 2 ]

0 голосов
/ 24 декабря 2010

Я понял. Как оказалось, мне удалось переключить ширину и высоту в вызове setMeasuredDimension(int, int). Я думал, что сделал это соответствующим образом, но после нескольких часов выдергивания волос определил, что на самом деле это не так.

0 голосов
/ 22 декабря 2010

Возможно переопределить метод «onMeasure (int widthMeasureSpec, int heightMeasureSpec)» и не забудьте вызвать «setMeasuredDimension (int, int)», как описано в документации

http://developer.android.com/reference/android/view/View.html#onDraw(android.graphics.Canvas)

...