【问题标题】:How can I get both start and ending coordinates on Android Touch event (motion event)?如何获取 Android Touch 事件(运动事件)的开始坐标和结束坐标?
【发布时间】:2012-07-04 03:04:21
【问题描述】:

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

【问题讨论】:

    标签: android coordinates touch-event


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      改写dispatchTouchEvent(),你会得到所有的接触。不要忘记致电super.dispatchTouchEvent(),否则您将停止将触摸传递到您的活动中的视图。

      【讨论】:

      • 谢谢伊万!但是,该应用程序仍然只注册最后一个坐标。在 ACTION_DOWN 期间我是否需要 getX 和 getY,正如 Geobits 下面所说的那样?如果是这样,我应该把代码放在哪里?
      • 是的,我假设你已经这样做了:) 它的工作方式是你接收屏幕给你的所有事件,你的工作就是弄清楚发生了什么。我会使用成员来存储状态。喜欢boolean mIsSwiping。当您收到ACTION_DOWN 时,将其设置为true 并读取您的起点坐标。当您收到ACTION_UP 时:如果mIsSwipingtrue,则读取结束坐标并将mIsSwiping 设置为false,如果不是 - 无事可做。
      • 查看此内容以供参考:grepcode.com/file/repository.grepcode.com/java/ext/… 注意ACTION_DOWN 他们基本上是如何设置mIsBeingDragged 的(取决于孩子的数量,但那是因为它是ScrollView,除非它你不能滚动有一个孩子)到trueACTION_UP 或ACTION_CANCEL 他们将mIsBeingDragged 设置为false
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      • 2011-03-28
      • 2011-10-05
      • 1970-01-01
      • 2018-06-24
      • 1970-01-01
      相关资源
      最近更新 更多