Pour une application que je développe, je veux représenter graphiquement les résultats d'un podomètre. Le podomètre utilise un service
pour mesurer le nombre de pas effectués en arrière-plan. J'ai une vue personnalisée appelée DrawView, dans laquelle je veux dessiner mes résultats. J'appelle la méthode drawPoint de mon service
chaque fois qu'une étape est mesurée. Ensuite, à partir de ma méthode drawPoint, j'essaie d'appeler onDraw()
en utilisant invalidate()
. Selon mes journaux, drawPoint est appelé, mais onDraw()
ne l'est pas. Donc ma question est:onDraw() n'est pas appelé dans la vue personnalisée
Pourquoi est-ce que onDraw() n'est pas appelé, et comment devrais-je faire appel à 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();
}
}
où avez-vous appelé point de soutirage()? –
Au lieu d'appeler directement view.drawPoint() à partir du service, utilisez handler pour mettre à jour l'interface utilisateur. – vakman