2016-10-04 3 views
0

J'ai un conteneur qui gère toutes les touches et traverse (si nécessaire) certains des événements à son enfant en appelant onTouch qui est implémenté par la vue enfant.Le problème est que le conteneur reçoit des touches dans son propre système de coordonnées et de l'enfant doivent traduire en CS.Here de l'enfant est le code du conteneur:convertir les coordonnées de l'espace de coordonnées du conteneur en un enfant

@Override 
public boolean onTouchEvent(MotionEvent event) { 
//handle some gestures 
    .... 
    //traverse motion event so container's children can handle it 
    if(numFingers==1) 
     content.onTouch(content,event); 
    return true; 
} 

code de l'enfant:

public boolean onTouch(View v, MotionEvent event) { 
    //get child's tranformation 
    Matrix m=this.getMatrix(); 
    float[] coords=new float[2]; 
    //get touch coords 
    coords[0]=event.getX(); 
    coords[1]=event.getY(); 
    //translate it to child's coordinates 
    m.mapPoints(coords); 
    PointF p =new PointF(coords[0],coords[1]); 
    Piece piece=getPieceUnderPoint(p); 
    if (piece!=null) 
     Log.d("game field3",piece.i+","+piece.j); 
    return true; 
} 

Je peux voir mes coordonnées est traduit de façon incorrecte par le rectangle dessin sur la toile de l'enfant autour point de contact.

+0

pouvez-vous afficher les coordonnées attendues et les coordonnées observées – suku

Répondre

0

La solution était que je dois inverser la matrice de transformation avant de l'appliquer aux coordonnées tactiles m.invert (m);