如何在android中获取关于父视图的触摸坐标

时间:2013-12-12 14:01:02

标签: android ontouchlistener coordinate-systems

我有两张图片:

  1. 一个圆圈
  2. 在圆圈顶部放置一个小三角形。
  3. 这两个图像放在一个片段中。 我有一个三角形的触控器。但我想根据圆圈计算触摸的坐标和随后的移动,因为我必须沿着圆圈移动三角形。

    有没有办法找到相对于片段的触摸坐标,以便所有计算都相对于片段?

    更新: 我想找到这些坐标的原因是因为我必须沿着圆形图像的边缘移动三角形图像。因此,我需要计算触摸移动距离圆形图像的距离,然后沿着圆圈移动三角形,直到触摸坐标几乎与圆的半径相同。如果触摸事件移动到其他地方,则停止移动。

    我有以下代码来计算触摸距圆心的距离,并且仅当该值与半径几乎相同时才移动三角形。

    public boolean onTouch(View v, MotionEvent event) {
    
                switch (event.getAction()) {
    
                    case MotionEvent.ACTION_DOWN:
    
    
    
    
    
                            float touchPosRelativeToCircleX = event.getX() + mCurrTempIndicator.getLeft() - mThermostatBgrd.getLeft();
                            float touchPosRelativeToCircleY = event.getY() + mCurrTempIndicator.getTop() - mThermostatBgrd.getTop();
    
    
                            float dx = touchPosRelativeToCircleX;
                            float dy = touchPosRelativeToCircleY;
    
                            float r = FloatMath.sqrt((dx * dx) + (dy * dy));
    
    
                        break;
    
                    case MotionEvent.ACTION_MOVE:
    
    
                        dx = event.getX() + mCurrTempIndicator.getLeft() - mThermostatBgrd.getLeft();
                        dy = event.getY() + mCurrTempIndicator.getTop() - mThermostatBgrd.getTop();
    
                        r = FloatMath.sqrt((dx * dx) + (dy * dy));
    
                        // if r is almost the same as  the radius them move else don't move.
    
    
                    break;
    
                    case MotionEvent.ACTION_UP:
                        allowRotating = true;
                        break;
                }
    
    
    
                return true;
            }
    

2 个答案:

答案 0 :(得分:0)

在片段onTouchListener上设置rootView。当您触摸三角形时,您还将触摸片段的视图,您将获得回调。

答案 1 :(得分:0)

在Touch回调中的触控侦听器的三角视图中,执行:

touchPosRelativeToCircleX = event.getX() + triangleView.getLeft() - circleView.getLeft();
touchPosRelativeToCircleY = event.getY() + triangleView.getTop() - circleView.getTop();