将坐标从容器的坐标空间转换为子坐标空间

时间:2016-10-04 20:28:10

标签: android coordinates touches

我有容器处理所有触摸并通过调用由子视图实现的onTouch遍历(必要时)一些事件给它的孩子。问题是容器接收其自己的坐标系统中的触摸,而孩子必须翻译它到孩子的CS.Here是容器的代码:

@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 个答案:

答案 0 :(得分:0)

解决方案是我必须在将变换矩阵应用于触摸坐标之前将其反转 m.invert(米);