该应用正在关注。我在屏幕上有一条线。我触摸屏幕并移动手指。在我的手指接触到这条线的那一刻 - 我想在交叉时刻显示一条消息。
代码:
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放在这个等式中。因此,当满足等式时,它返回真实,否则 - 错误。
但我想要抓住所有案件。
怎么办?
答案 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;
行相交的某些链接:
答案 1 :(得分:1)
要点击您当前已准确命中该行的行,因此您应该增加触摸的&#34;字段。
例如,您可以创建一个半径(其中心位于getX和getY中)的半径,并检查圆是否与您的直线相交。