2013-08-16 4 views
1

Je travaille sur une application qui trace des nœuds sur une carte, et chaque nœud a des bords qui sont représentés par une ligne entre eux. J'ai dessiné les bords en utilisant Canvas et drawLine(), mais il serait utile que les lignes elles-mêmes puissent être cliquables. J'entends par là une méthode permettant à l'utilisateur de toucher la ligne ou de penser qu'il touche la ligne et qu'un événement peut se déclencher. (comme les informations de bord d'affichage, etc ...)Technique pour créer une toile drawLine() cliquable?

Je ne peux pas attacher correctement un événement tactile à une ligne que j'ai dessiné avec Canvas, alors je pensais placer ImageViews entre les extrémités de chaque ligne de bord qui est dessiné . ImageView peut être un point afin que l'endroit où l'événement tactile se déclenche soit clair.

Quelqu'un a-t-il d'autres suggestions? Je cherche principalement des idées que j'ai ratées. Peut-être qu'il y a quelque chose dans l'API Android qui peut aider avec ceci que je ne connais pas.

Merci d'avance pour tout conseils!

Répondre

2

Utilisez un chemin pour tracer la ligne:

Path linePath; 
Paint p; 
RectF rectF; 
float point1X, point1Y, point2X, point2Y; 

// initialize components 

// draw the line 
linePath.moveTo(point1X, point1Y); 
linePath.lineTo(point2X, point2Y); 

canvas.drawPath(linePath, p); 

linePath.computeBounds(rectF, true); 

Override onTouchEvent(MotionEvent):

@Override 
public boolean onTouchEvent(MotionEvent event) { 

    float touchX = event.getX(); 
    float touchY = event.getY(); 

    switch (event.getAction()) { 
    case MotionEvent.ACTION_DOWN: 
     if (rectF.contains(touchX, touchY)) { 
      // line has been clicked 
     } 
     break; 
    } 
    return true; 
} 
+0

Impressionnant! Je vais l'essayer maintenant! – garlicman

+0

Juste comment détecter le chemin touché. La vue Canvas dessinera plusieurs lignes, et donc il y aura plusieurs instances rectF et j'ai besoin de suivre et de savoir qui a été touché. Je pensais en garder un éventail, créé pendant le tirage au sort, puis au toucher, passer à travers le tableau à la recherche d'un coup. – garlicman

+0

@garlicman Oui, c'est une façon de s'y prendre. Cela fonctionnera absolument. L'instruction if devra être placée à l'intérieur d'un for-block: 'if (rectF [i] .contains (touchX, touchY)) {//}'. – Vikram

Questions connexes