#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);