2017-09-10 2 views
0

Comment convertir mes coordonnées réelles de l'image en coordonnées que j'ai obtenu de onTouch(View v, MotionEvent event. Fondamentalement, j'ai imageview que je dessine des rectangles et je veux vérifier que l'utilisateur touche à l'intérieur de ces rectangles. J'ai quelque chose comme ceci:obtenir une image réelle coïncide de l'événement tactile

private ArrayList rects = new ArrayList <>();

resultView.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_DOWN){ 
      int x = (int) event.getX(); 
      int y = (int) event.getY(); 

      for (Rect rect : rects) { 
       if (x > rect.left && x < rect.right && y > rect.bottom && 
       y < rect.top) { 
         // the user toches on of these rectangle 
       } 
      } 
     } 
     return true; 
    } 
    }); 

mais le vrai problème est que mon rects est l'image réelle coordonnées qui est beaucoup plus grand et le x , y est les coordonnées du imageview.how pour convertir le thème.

Répondre

0

Puisque les coordonnées provenant du TouchEvent sont des coordonnées absolues, vous pouvez leur retirer les coordonnées absolues de votre ImageView. Cela fera vos coordonnées (x,y) par rapport à ImageView. Vous pouvez le faire comme -

int arr[] = new int[2]; 
imageView.getLocationOnScreen(arr); 
float xRelative = event.getRawX() - arr[0]; 
float yRelative = event.getRawY() - arr[1]; 

Vous pouvez maintenant utiliser xRelative et yRelative au lieu de x et y étant donné que rects contiennent les coordonnées par rapport à votre imageview.

0

Je ne suis pas sûr que je comprends votre problème, mais je pense que vous devriez ajouter la vue de l'image les coordonnées de l'instruction if comme ce qui suit

if (x +resultView.getX() > rect.left && x +resultView.getX()< rect.right && y +resultView.getY()< rect.bottom && 
      y +resultView.getY()> rect.top)