2013-05-06 4 views
0

J'essaie de faire une vue tactile Re-dimension que j'ai faite avec succès. Vous pouvez trouver le code How to make view resizable on touch event.Obtenir de nouveaux points d'Angle Android

Il a 4 coins. Vous pouvez redimensionner ce rectangle en faisant glisser l'un des coins. Mais maintenant je veux améliorer cette logique et vouloir mettre la rotation dans ce code. Je réussis à trouver l'angle lorsque l'utilisateur touche le centre de l'un des bords du rectangle. Mais maintenant le problème est que je ne peux pas obtenir une nouvelle position des coins afin que je puisse redessiner ce rectangle et la rotation est possible.

Question est: Comment puis-je calculer 4 coins nouvelle position basée sur Angle?.

Répondre

0

Si vous connaissez l'angle de rotation, vous n'avez pas besoin de calculer les sommets du rectangle. Une façon simple de le faire serait comme ci-dessous

@Override 
     protected void onDraw(Canvas canvas) { 
      super.onDraw(canvas); 
      canvas.save(); 
      canvas.rotate(60.0f); 

      paint.setColor(Color.BLACK); 
      paint.setStyle(Paint.Style.STROKE); 

      canvas.drawRect(10, 10, 100, 100, paint); 
      canvas.restore(); 
     } 
+0

Je connais ce scénario pour faire pivoter la toile .. mais ensuite après que les points aient été sur leur ancien emplacement. La prochaine fois, je ne peux pas trouver un nouveau lieu de 4 points d'angle sur la toile. Cela ne marchera pas mon ami. –

0

Comme je l'ai compris, vous voulez calculer les nouvelles coordonnées en fonction d'un angle de rotation ... Il est probablement plus simple que vous le pensez:

x' = x × (cosα - sinα) 
y' = y × sinα × cosα 

Donc, vous appliquez simplement ce par programme, en considérant où x' est le résultat de la rotation de x et le même pour y' et y, et α est l'angle de rotation.

cosα et sinα fonctions sont disponibles en Java comme Math.cos(α) et Math.sin(α), mais attention: en Java, toutes les fonctions trigonométriques utilise radians et non degrés que l'angle, donc vous pouvez considérer ceci: rad = deg * 180/π Applicable à:

double deg = 45d; //Put instead your degrees 
double rad = deg/180 * Math.PI; //The radians convertion 
Questions connexes