如何根据其他视图位置设置视图的旋转

时间:2018-01-29 21:22:43

标签: java android libgdx

我知道这个问题没有多大意义,但我有两个观点。

第一个我设定位置X& Y基于活动的触摸事件。

第二个就像一个固定在活动中间的箭头,我希望它准确指出第一个视图的位置。

有没有办法可以将视图的位置坐标转换为基于屏幕中心的角度值。?

parentView.setOnTouchListener(new OnTouchListener() {
      @Override
      public boolean onTouch(View view, MotionEvent event) {
        marker.setX(event.getX()); // marker is the first view
        marker.setY(event.getY());
        FixedArrow.setRotation(/* ??? */); //FixedArrow is the second view
        return true;
      }
    });

2 个答案:

答案 0 :(得分:0)

尝试这样的事情

public float getAngle(Point target, Point center) {
    float angle = (float) Math.toDegrees(Math.atan2(target.y - center.y, target.x - center.x));

    if(angle < 0){
        angle += 360;
    }

    return angle;
}

称之为做这样的事情

Point target = new Point((int) event.getX(), (int) event.getY());
Point center = new Point(parentView.getWidth()/2, parentView.getHeight()/2);
FixedArrow.setRotation(getAngle(target,center)); 

答案 1 :(得分:0)

这是来自中学几何学的任务。基本上你需要的是解决直角三角形。此三角形的一侧始终是从屏幕中心到最近屏幕边框的一条线,另一条从中心到用户点击点。应用三角法,您可以计算角度。

最终公式和解释图片可以在this answer

中找到