如何捕捉触摸交叉线的时刻?

时间:2014-03-28 06:52:51

标签: android multithreading touch android-canvas

该应用正在关注。我在屏幕上有一条线。我触摸屏幕并移动手指。在我的手指接触到这条线的那一刻 - 我想在交叉时刻显示一条消息。

代码:

    public boolean onTouch(View v, MotionEvent event) {
        int action = event.getAction() ;
            case MotionEvent.ACTION_DOWN: 
                break;
            case MotionEvent.ACTION_MOVE:
                boolean isline = check_line(event.getX(),event.getY());
                if(isline){
                    //SHOW MESSAGE
                }
                break;
            case MotionEvent.ACTION_UP:   
                break;
            }
        return true;
    }

但该应用程序有时无法捕捉手指在线上的那一刻。如果我慢慢移动 - 那么消息总会出现。但如果我移动得快一点 - 没有消息。

线的方程是A * x + B * y + C = 0

check_line是一个数学函数,它只是将我的x和y放在这个等式中。因此,当满足等式时,它返回真实,否则 - 错误。

但我想要抓住所有案件。

怎么办?

2 个答案:

答案 0 :(得分:2)

如果你快速行动,那么你就无法获得你移动的所有点,这就是你的方程出错的原因..

<强>解决方案:

使用线相交方程.. 对于线相交,您需要四个x-y值。你已经有两个x-y值来自行,第三个x-y值是当前触摸事件,而x-y值应该是最后一次触摸事件。

int lastX;
int lastY;
int currentX;
int currentY;

case MotionEvent.ACTION_MOVE:
   currentX = event.getX();
   currentY = event.getY();

   //your line intersect code


   lastX = event.getX();
   lastY = event.getY();
break;

行相交的某些链接:

Solution1

Solution2

答案 1 :(得分:1)

要点击您当前已准确命中该行的行,因此您应该增加触摸的&#34;字段。

例如,您可以创建一个半径(其中心位于getX和getY中)的半径,并检查圆是否与您的直线相交。