【问题标题】:Track multi-touch events to JSON in Android在 Android 中将多点触控事件跟踪为 JSON
【发布时间】:2014-03-22 16:35:37
【问题描述】:

我一直在与这个问题作斗争一段时间,想请教一些建议。

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

action是什么动作(下、上等),timestamp是从开始触摸记录开始的时间,index应该是哪个手指,(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(event),最终在 writeTouchJSON 方法中结束。

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

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

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

【问题讨论】:

    标签: android pointers multi-touch


    【解决方案1】:

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

    【讨论】:

    • 我不敢相信它是那么容易...我进行了更改,以便在 for 循环中创建 JSONObject 并将其添加到循环结束时的 jsonobjects 列表中。你同意这个解决方案吗?
    猜你喜欢
    • 2012-06-13
    • 2014-01-12
    • 1970-01-01
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    相关资源
    最近更新 更多