在Android中跟踪多点触控事件到JSON

时间:2014-03-22 16:35:38

标签: android pointers multi-touch

我现在已经解决了这个问题一段时间了,我以为我会提出一些建议。

此代码的目的是生成一个Json文件,其中包含有关用户如何在应用程序中移动的信息。每当我收到触摸事件时,我都会使用以下信息写入Json对象的arraylist: {"行动","时间戳","索引"," y"," x"}

动作是什么样的动作(向下,向上等),时间戳是从触摸记录开始的时间,索引应该是什么手指,(x,y)是位置手指。

然而,问题是,我似乎无法使其适用于多点触控。最终,这个Json文件将用于制作视频,显示用户的动作。一根手指工作得很好但是当涉及到几根手指时,我需要掌握这些特定数据的来源信息。

目前,它会跟踪手指,如果我使用另一根手指,它将开始跟踪,而忽略第一个手指。

public void writeTouchJSON(MotionEvent event, float time) {
    int pointerCount = event.getPointerCount();
    JSONObject object = new JSONObject();
    try {
        String action;
        action = new String();
        switch(event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            action = "down";
            break;
        case MotionEvent.ACTION_UP:
            action = "up";
            break;
        default:
            action = "" + event.getActionMasked();
        }

        for (int i = 0; i < pointerCount; i++) {
            //int index = event.getPointerId(i);
            object.put("x", (int) event.getX(i)); // X-pos of finger
            object.put("y", (int) event.getY(i)); // Y-pos of finger
            object.put("timestamp", (int) (0.000001*(time - timeAtAppLaunch))); // Time since recording started
            object.put("action", action); // What kind of action ("up", "down" or a constant)
            object.put("index", i + 1); // What finger
        }

        Log.d("Wrote JSON to list", object.toString());
    } catch (JSONException e) {
        e.printStackTrace();
        Log.d("ERROR: json.", ""+e);
    }
    jsonobjects.add(object);
}

我希望附上的代码足够了。在方法

onTouchEvent(MotionEvent event)

我检查应用程序是否正在录制,如果是,我将事件发送到logTouchEvents(事件),最终在writeTouchJSON方法中结束。

我个人的理论是,我搞砸了指针的含义。根据我的理解,指针是指针?所以一个事件有一个指针数组,其中0将为您提供有关触摸屏幕的第一个手指的信息,1关于第二个手指的信息等等,但也许这是错误的?

如果您对我为什么这样做感兴趣,那是因为我正在为学校制作用户体验测试apk,您可以在其中记录一个人如何浏览您的应用得到一个显示这个的视频。

感谢您的时间!感谢我能得到的任何帮助!

1 个答案:

答案 0 :(得分:1)

在for循环中,每个变量都会被其先前的值覆盖。你应该为每个指针(手指)创建一个包含一个元素的数组。