View.setRotation导致内部坐标系旋转导致问题解决方

2019-10-18  本文已影响0人  kongzue

问题描述

使用方法 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集合。

解决完成。

上一篇下一篇

猜你喜欢

热点阅读