2012-02-03 7 views
0

Je viens de commencer avec Android et je me demandais comment utiliser les écouteurs dans une toile. Particulièrement dans le cadre de mon projet, l'objectif est qu'un événement se produise lorsque l'on fait glisser un clic d'un point à un autre. Le concept provient d'un jeu appelé brainvita. Le jeu n'a pas besoin d'être compris pour répondre à ma question. Tout ce que je veux savoir est le moyen le plus simple de faire un écouteur pour les clics glisser d'un point à un autre sur le canevas? Dois-je mapper le canevas sur une grille et avoir plusieurs auditeurs? Quelle est la manière la plus simple?Android Listener sur toile?

De plus, je joins le code du jeu développé jusqu'ici, juste les bases qui aident à afficher la grille!

package com.project.android.brainvita; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.view.View; 

public class GameView extends View { 

Paint paint = new Paint(); 
Paint paintF = new Paint(); 
Paint paintG = new Paint(); 
int width, height; 
int MARGIN = 4; 
int MARGIN_BIG = 10; 
int sx = 2; 

public GameView(Context context) { 
    super(context); 
    paint.setColor(Color.WHITE); 
    paintF.setColor(Color.rgb(40, 60, 204)); 
    paintG.setColor(Color.rgb(240, 30, 20)); 
} 

public void onDraw(Canvas canvas) { 
    // Draw external circle 
    canvas.drawCircle(width/2, height/2, (width - MARGIN)/2, paintF); 

    // Calculate radius of small circles 
    int radius = (width - MARGIN_BIG*2)/14; 

    // Draw grid 
    for (int j = -3; j <= 3; j++) { 
     if (j >= -1 && j <= 1) 
      for (int i = -3; i <= 3; i++) { 
       canvas.drawCircle(width/2 + (2 * radius * i), height/2 
         + (2 * radius * j), radius - sx, paint); 
      } 
     else 
      for (int i = -1; i <= 1; i++) { 
       canvas.drawCircle(width/2 + (2 * radius * i), height/2 
         + (2 * radius * j), radius - sx, paint); 
      } 
    } 
} 

protected void onSizeChanged(int w, int h, int ow, int oh) { 
    width = w; 
    height = h; 
} 

} 

Répondre

1

Dans le développement Android, une toile est utilisée pour le dessin. Une vue est utilisée pour interagir avec l'utilisateur. Il n'y a pas de mécanisme direct permettant à un canevas de recevoir une entrée de l'utilisateur. Cela doit être géré à travers une vue.

Vous voudrez ajouter un onTouchListener à la vue qui héberge votre canevas et utiliser cet écouteur pour stocker les informations d'état concernant les touches de l'utilisateur.

+0

Alors, comment utiliser l'onTouchListener pour obtenir des emplacements sur la toile pour un clic glisser? J'ai besoin des coordonnées sur la toile pour un cliquer-glisser d'un point à un autre. En utilisant à la fois les coordonnées, je vais déterminer si c'est un mouvement valide ou non et en conséquence avoir la sortie. – degant

+2

Vous devez garder le contexte du jeu en dehors de la portée de la toile. Considérez votre toile comme étant un dessin du contexte du jeu, c'est-à-dire "Je vais dessiner le plateau de jeu sur la toile" au lieu de penser à votre toile comme le plateau de jeu. L'onTouchListener devrait consulter le plateau de jeu partagé pour déterminer si le coup est valide et la méthode de tirage devrait simplement dessiner le plateau de jeu. Vous devez cliquer sur la zone tactile pour déterminer ce qui a été cliqué, puis consulter le plateau de jeu pour savoir s'il est valide. –