3

作为在线课程的一部分,我被要求修改现有代码。目前,应用程序注册并显示屏幕被触摸位置的 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;
4

2 回答 2

0

要获取起始坐标,您还需要在事件期间获取并保存getX(),因为这表示移动的开始。getY()ACTION_DOWN

于 2012-07-03T16:28:23.703 回答
0

实际上,您的代码大部分是正确的,ACTION_DOWN将为您提供开始,ACTION_UP结束。你的错误是压倒一切onTouchEvent()的 - 阅读描述,它说只有在没有视图处理触摸时才会调用它,所以你的触摸可能会被你的一些子视图拦截。

dispatchTouchEvent()而是覆盖,你会得到所有的接触。不要忘记打电话super.dispatchTouchEvent(),否则您将停止将触摸传递到您的活动中的视图。

于 2012-07-03T16:33:19.317 回答