0

我在我的 MapView 中添加了旋转,除了触摸之外它运行良好。

我按照这个代码链接旋转视图和计数器旋转触摸。

现在我的问题。

即使当前没有旋转,触摸位置的计算也是错误的。例如,在 roation = 0 期间,y 坐标向下移动。

原因是 canvas.getMatrix().invert(mMatrix);
即使我不旋转画布,似乎也得到了错误的倒置矩阵。

@Override
protected void dispatchDraw(Canvas canvas)
{
    canvas.save(Canvas.MATRIX_SAVE_FLAG);
    //canvas.rotate(rotation, getWidth() * 0.5f, getHeight() * 0.5f);
    canvas.getMatrix().invert(mMatrix);     
    Log.d("matrix", mMatrix.toString());
    super.dispatchDraw(canvas);
    canvas.restore();
}

日志说矩阵是:(在没有旋转期间) Matrix{[1.0, -0.0, 0.0][-0.0, 1.0, -38.0][0.0, 0.0, 1.0]}

那么问题出在哪里?

4

1 回答 1

0

我为解决此问题所做的工作如下:

    private Matrix invertedMatrix = new Matrix();
    private float[] tempLocation = new float[2];


    @Override
    protected void dispatchDraw(Canvas canvas) {
        canvas.save(Canvas.MATRIX_SAVE_FLAG);
        canvas.rotate(mHeading, getWidth() * 0.5f, getHeight() * 0.5f);
        canvas.getMatrix().invert(invertedMatrix);
        mCanvas.delegate = canvas;
        super.dispatchDraw(mCanvas);
        canvas.restore();
    }


    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        centeringAllowed = false;

        float[] location = tempLocation;
        location[0] = ev.getX();
        location[1] = ev.getY();
        invertedMatrix.mapPoints(location);
        ev.setLocation(location[0], location[1]);
        return super.dispatchTouchEvent(ev);
    }
于 2012-09-06T19:50:47.650 回答