问题描述
使用方法 view.setRotation(float rotation) 方法旋转 view 导致其内部坐标系也发生旋转,再之后执行 其自身的 touchEvent 拖拽移动时出现极其鬼畜乱飘的问题,经查证,是 touchEvent中的 event.getX() 与 event.getY() 返回了旋转后坐标系的坐标导致,解决方案基本确定了采用转换坐标到旋转前的坐标系的解决方案。
解决方案
核心代码:
private float[] coordinateTransformation(float[] xy, int r) {
float[] result = new float[2];
float x1 = xy[0];
float y1 = xy[1];
result[0] = (int) ((x1) * Math.cos(Math.PI / 180.0 * r) - (y1) * Math.sin(Math.PI / 180.0 * r));
result[1] = (int) ((x1) * Math.sin(Math.PI / 180.0 * r) + (y1) * Math.cos(Math.PI / 180.0 * r));
return result;
}
参数:(int[event.getX(),event.getY()] , rotation)
int[event.getX(),event.getY()]:旋转后的错误坐标;
rotation:旋转度数。
返回,原坐标系x,y集合。
解决完成。
网友评论