我已经得到了我认为是一个简单的问题,但解决方案无法解决我的问题。这个问题的前提很简单:我有一个视图(称之为一个点)与中心vx,vy我想旋转一个更大的圆圈cx,cy。我研究过使用sin,cos,radians,atan2,所有这些爵士乐,但由于某种原因,当我旋转我的视图时,它看起来好像是在椭圆形而不是圆形中旋转。数学为此避开了我。围绕一个中心点旋转视图
我有什么到目前为止:
public void update(double matrixAngle)
double angleInDegs = Math.toDegrees(mAngle);
double newAngle = (matrixAngle > 0) ? angleInDegs + matrixAngle : angleInDegs - matrixAngle;
double angleInRads = Math.toRadians(newAngle);
float dx = itemCircle.getCenterX() - getCenterX();
float dy = itemCircle.getCenterY() - getCenterY();
double radius = Math.sqrt(dx * dx + dy * dy);
float x = (float) (getCenterX() + radius * Math.cos(angleInRads));
float y = (float) (getCenterY() - radius * Math.sin(angleInRads));
itemCircle.setCenterX(x);
itemCircle.setCenterY(y);
对于一些澄清:该方法的
matrixAngle
参数是用于旋转整个视图中的矩阵角。范围从0-180,然后从-180到0,其中0从圆圈的右侧打开。
mAngle
是视图被绘制的原始角度。它的范围从0到360.
itemCircle
是代表视图边界的圆圈。它是一个圆圈(确切地说是一个扩展的FloatingActionButton)。
getCenterX(), getCenterY()
是我想要旋转的大圈的坐标。
我真的很感谢这里的帮助。这个问题一直困扰我一整天。
可能是你可以尝试对象动画师。 –
这就是问题所在。我会的,但我需要更新每个视图的触摸坐标(我将使用它的'itemCircle'),因为我需要让它们响应点击事件并激发我的点击侦听器。 –