2013-07-04 2 views
0

Для приложения, которое я разрабатываю, хочу графически отображать результаты с шагомера. Шагомер использует service для измерения количества шагов, выполняемых кем-то в фоновом режиме. У меня есть пользовательский вид под названием DrawView, в котором я хочу нарисовать результаты. Я вызываю метод drawPoint из моего service всякий раз, когда измеряется шаг. Затем из моего метода drawPoint я пытаюсь позвонить onDraw(), используя invalidate(). Согласно моим журналам, drawPoint вызывается, но onDraw() - нет. Так что я задал себе вопрос:onDraw() не вызывается в пользовательском представлении

Почему onDraw() не звонит, и как мне заставить DrawView называть его?


public class DrawView extends View { 

... 

@Override 
public void onDraw(Canvas canvas) { 
    for (Point point : points) { 
     canvas.drawCircle(point.x, point.y, 5, paint); 
     Log.d("Checks", "onDraw is called"); 
    } 
} 

public void drawPoint(int counter) { 
    Log.d("Checks", "Point coordinates: " + 40 + ", " + counter); 

    Point point = new Point(); 
    point.y = 40; 
    point.x = counter; 
    points.add(point); 
    invalidate(); 
} 
} 
+0

где вы назвали drawPoint()? –

+0

Вместо прямого вызова view.drawPoint() из службы используйте обработчик для обновления ui. – vakman

ответ

1

Вместо вызова непосредственно view.drawPoint() от службы, используйте обработчик для обновления пользовательского интерфейса.

Проверить ссылку update ui from background service

+0

Отличный учебник, теперь он работает! Благодаря! – Zero

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