2013-07-04 3 views
0

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(); 
} 
} 
+0

où avez-vous appelé point de soutirage()? –

+0

Au lieu d'appeler directement view.drawPoint() à partir du service, utilisez handler pour mettre à jour l'interface utilisateur. – vakman

Répondre

1

appelant directement au lieu view.drawPoint() du service, gestionnaire d'utiliser pour mettre à jour l'interface utilisateur.

Vérifiez le lien update ui from background service

+0

Super tutoriel, ça marche maintenant! Merci! – Zero

Questions connexes