android中的轨迹运动onTouch
在用户触摸屏幕上名为android中的轨迹运动onTouch,android,Android,在用户触摸屏幕上名为touchLayout的LinearLayout后,我希望跟踪他们手指的移动,直到他们松开触摸。最重要的是,我想找出用户手指在触摸过程中移动的距离 这就是我到目前为止所做的: .java文件 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(
touchLayout
的LinearLayout
后,我希望跟踪他们手指的移动,直到他们松开触摸。最重要的是,我想找出用户手指在触摸过程中移动的距离
这就是我到目前为止所做的:
.java
文件
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final View touchLayout = findViewById(R.id.touchLayout);
final TextView score = (TextView)findViewById(R.id.score);
touchLayout.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN){
Integer xcoorda = Integer.valueOf((int) event.getX());
Integer ycoorda = Integer.valueOf((int) event.getX());
}
if (event.getAction() == MotionEvent.ACTION_MOVE){
//**This is where I need something to record distance**
Integer xcoordb = Integer.valueOf((int) event.getX());
Integer ycoordb = Integer.valueOf((int) event.getX());
}
if (event.getAction() == MotionEvent.ACTION_UP){
Integer xcoordc = Integer.valueOf((int) event.getX());
Integer ycoordc = Integer.valueOf((int) event.getX());
}
return true;
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
编辑我想查找距离而不是位移。按照我所希望的方式,两点之间的曲线返回的值应该大于相同两点之间的直线。您需要将以前的x和y值存储在类变量中,以便可以将它们与ACTION\u MOVE中的新值进行比较
touchLayout.setOnTouchListener(
new View.OnTouchListener()
{
private float lastX;
private float lastY;
private float total;
@Override
public boolean onTouch(View v, MotionEvent event)
{
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
lastX = event.getX();
lastY = event.getY();
total = 0;
}
else if (event.getAction() == MotionEvent.ACTION_MOVE)
{
float x = event.getX();
float y = event.getY();
total += Math.sqrt(Math.pow(x - lastX, 2) + Math.pow(y - lastY, 2));
lastX = x;
lastY = y;
}
else if (event.getAction() == MotionEvent.ACTION_UP)
{
//Do whatever
}
return true;
}
});
使用距离公式
double dist = Math.sqrt(Math.pow(xcoordc - xcoorda, 2) + Math.pow(ycoordc- ycoorda, 2));
这很好,但我想找到总行驶距离,而不是起点和终点之间的距离。这样,曲线返回的值会比直线的值大。这很好,但我想找到的是行驶的总距离,而不是起点和终点之间的距离。这样,曲线将返回比直线更大的值。