如何在Android中的setPolyToPoly之后映射触摸坐标?

时间:2016-07-05 09:46:45

标签: android view touch coordinates

首先,使用Matrix:

应用视图的某些转换
    // Resetting matrix from previous transformations.
    mMatrix.reset();

    // View's rectangle angles' transformations.
    mMatrix.setPolyToPoly(new float[] {
            0,          0,
            getWidth(), 0,
            0,          getHeight(),
            getWidth(), getHeight()
    }, 0, newCoords, 0, 4);

    // Asking view to invalidate itself.
    invalidate();

然后在onDraw方法中应用在Matrix中编码的转换:

    // Applying transformation.
    canvas.concat(mMatrix);

    // Invalidating.
    super.onDraw(canvas);    

最后尝试映射触摸坐标以适应dispatchTouchEvent中的新转换:

    // We need an array of float coordinates to map them with our matrix.
    float[] coordinates = new float[] {
            event.getX(), event.getY()
    };

    // Mapping touch points.
    mMatrix.mapPoints(coordinates);

    // Applying shifts for current touch.
    event.setLocation(coordinates[0], coordinates[1]);

使用此代码,我们总是会出现错误的触摸坐标移位。我能达到的最佳效果就是这一行:

event.offsetLocation(event.getX() - coordinates[0], event.getY() - coordinates[1]);

而不是这一个:

event.setLocation(coordinates[0], coordinates[1]);

但它仍然不正确。此外,当我们将setRotation应用于视图时,此代码以完全错误的方式工作(这让我很奇怪,因为在这种情况下,坐标系也应该旋转)。

您对Android API中如何通过视图的setPolyToPoly转换同步触摸坐标的方法有任何建议吗?

0 个答案:

没有答案