2010-07-19 5 views
0

J'ai créé une vue personnalisée en chargeant une image d'une petite balle. Alors que la méthode onDraw ressemblerait à ceci:Android :: Création d'une balle élastique draggable?

public void onDraw(Canvas canvas) { 
    canvas.drawBitmap(...); 
} 

Plus tard, j'ai ajouté un auditeur OnTouch pour pouvoir écouter toucher des événements pour permettre à la balle d'être traîné autour.

public boolean onTouchEvent(MotionEvent event) { 
     int eventaction = event.getAction(); 

     int X = (int)event.getX(); 
     int Y = (int)event.getY(); 

     switch (eventaction) { 

     case MotionEvent.ACTION_MOVE: // touch drag with the ball 
      // move the balls the same as the finger 
      ball.setX(X-25); 
      ball.setY(Y-25); 

      break; 
     } 
     // redraw the canvas 
     invalidate(); 
     return true; 
    } 

Maintenant, je suis en train de faire la balle déplacer uniquement le long d'une courbe et si elle ne se déplace pas au-delà d'un point fixe, le faire se balancer à sa position d'origine. Donc, il y a deux problèmes que je suis actuellement confronté:

  1. Fixation de la trajectoire de la balle
  2. Jetant en arrière par l'animant. Un problème que j'observe est si je utiliser ball.startAnimation, et si la balle était légèrement floue, la boule semble tranchée.

Ball Swing http://www.freeimagehosting.net/uploads/b68d5434ed.png

Toutes les suggestions s'il vous plaît?

Répondre

0

La courbe semble faire partie d'un cercle, suggérant qu'elle a un centre et un rayon.

Je suggère de déterminer ce que c'est, puis d'écrire une fonction qui, étant donné la position du doigt, revient là où la balle devrait se trouver le long de la courbe. Cela nécessite simplement de déterminer l'angle du doigt par rapport au centre du cercle, puis d'utiliser cet angle pour positionner la balle correctement en utilisant la trigonométrie de base.

Dans votre photo, par exemple, la balle est à 0 ° et la marque semble être à environ 20 °.

Vous pouvez alors déterminer à quel angle la balle doit retourner si le doigt dépasse un certain point (encore une fois, décrit par un angle du centre du cercle)