преобразование координат из координатного пространства контейнера в дочернее

#android #coordinates #touches

#Android #координаты #прикосновения

Вопрос:

У меня есть контейнер, который обрабатывает все касания и передает (при необходимости) некоторые события своему дочернему элементу, вызывая onTouch, который реализуется дочерним представлением.Проблема в том, что контейнер получает касания в своей собственной системе координат, и дочерний элемент должен перевести его в дочернюю CS.Вот код контейнера:

 @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;
}
  

дочерний код:

 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;
}
  

Я вижу, что мои координаты переводятся неправильно, рисуя прямоугольник на дочернем холсте вокруг точки касания.

Комментарии:

1. можете ли вы опубликовать ожидаемые координаты и наблюдаемые координаты

Ответ №1:

Решение заключалось в том, что я должен инвертировать матрицу преобразования, прежде чем применять ее к сенсорным координатам m.инвертировать (m);