首先,使用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转换同步触摸坐标的方法有任何建议吗?