我被要求修改现有代码作为在线课程的一部分。目前,该应用程序注册并显示触摸屏幕的位置的x和y坐标以及以毫秒为单位的时间量。
我想添加获取开始和结束坐标的功能,即手指开始时和拖动时结束的位置。目前,注册的坐标似乎只是结束的坐标。如何添加两组坐标(例如,如果我想计算运动事件的距离)?这是代码的一部分。 谢谢你的帮助!
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
Calendar tiempoInicio = null;
Calendar tiempoFinal = null;
@Override
public boolean onTouchEvent(MotionEvent event) {
int x = (int)event.getX();
int y = (int)event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
tiempoInicio = Calendar.getInstance();
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
tiempoFinal = Calendar.getInstance();
Intent intent = new Intent (
AplicacionSencillaActivity.this,
AplicacionSencillaResults.class);
Bundle bundle = new Bundle();
bundle.putLong(
"TIEMPOPRESIONADO",
tiempoFinal.getTimeInMillis() -
tiempoInicio.getTimeInMillis());
bundle.putInt("X", x);
bundle.putInt("Y", y);
intent.putExtras(bundle);
startActivity(intent);
break;
答案 0 :(得分:0)
要获取起始坐标,您还需要在getX()
事件期间获取并保存getY()
和ACTION_DOWN
,因为这代表了移动的开始。
答案 1 :(得分:0)
实际上,您的代码大多是正确的,ACTION_DOWN
会为您提供开始,ACTION_UP
- 结束。你的错误是覆盖onTouchEvent()
- 阅读说明,它说它只会在没有任何一个视图处理触摸时被调用,所以你的触摸可能会被你的一些子视图截获。
改为覆盖dispatchTouchEvent()
,您将获得所有接触。不要忘记致电super.dispatchTouchEvent()
,否则您将停止接触活动中的观看次数。