如何在Android Touch事件(动作事件)上获得开始和结束坐标?

时间:2012-07-03 16:14:45

标签: android coordinates ontouchevent

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

实际上,您的代码大多是正确的,ACTION_DOWN会为您提供开始,ACTION_UP - 结束。你的错误是覆盖onTouchEvent() - 阅读说明,它说它只会在没有任何一个视图处理触摸时被调用,所以你的触摸可能会被你的一些子视图截获。

改为覆盖dispatchTouchEvent(),您将获得所有接触。不要忘记致电super.dispatchTouchEvent(),否则您将停止接触活动中的观看次数。