java - Android 加速计 - 动态时间扭曲

标签 java android accelerometer android-sensors gesture-recognition

对于一个类项目,我需要使用加速度计识别手势。 我目前对 x、y 和 z 值使用 if 语句的显式方法。

我了解到动态时间包裹是一种更有效的方法,因为它检查手势与先前存储的手势之间的匹配。

我将如何在 Android 中编写此代码,因为我似乎无法在网上找到任何内容。

public void onSensorChanged(SensorEvent event) {

    final float alpha = (float) 0.8;

    // Isolate the force of gravity with the low-pass filter.
    gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
    gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
    gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];

    // Remove the gravity contribution with the high-pass filter.
    linear_acceleration[0] = event.values[0] - gravity[0];
    linear_acceleration[1] = event.values[1] - gravity[1];
    linear_acceleration[2] = event.values[2] - gravity[2];

    float x1 =  linear_acceleration[0];
    float y1 =  linear_acceleration[1];
    float z1 =  linear_acceleration[2];

    x.setText("X: "+ x1);
    y.setText("Y: "+ y1);
    z.setText("Z: " + z1);

    if(y1 < -2 && z1 > 2)
    {
        action.setText("Phone Moved Forward!!");
        image.setVisibility(View.VISIBLE);
        image.setImageResource(R.drawable.forwardarrow);
    }
    else if(y1 < -2 && z1 < -2)
    {
        action.setText("Phone Moved Toward Face!!");
        image.setVisibility(View.VISIBLE);
        image.setImageResource(R.drawable.backarrow);
    }
    else if(y1 < -2 && x1 > 2)//y down, x up = left tilt
    {
        action.setText("Phone Titled Left!");
        image.setVisibility(View.VISIBLE);
        image.setImageResource(R.drawable.leftarrow);
    }
    else if(y1 < -2 && x1 < -2)//y down, x down = right tilt
    {
        action.setText("Phone Titled Right!");
        image.setVisibility(View.VISIBLE);
        image.setImageResource(R.drawable.rightarrow);
    }
    else
    {
        image.setVisibility(View.GONE);
        action.setText("Stable");
    }

}

最佳答案

我已将存储库上传到 GitHub,其中演示了 an example加速度计数据的动态时间规整;您可能会发现它很有用!

关于java - Android 加速计 - 动态时间扭曲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35876388/

相关文章:

android - 发布到 facebook 组

java - 卡尔曼滤波器和内部状态变量的质量

Android 磁力计返回随机值

java - 在背景框架上使用 Java KeyListener

java - Android:来自可运行的异步任务 - “Activity has leaked window that was originally added here”

java - 为什么jvm有很多clasloader?为什么不是一个?

android - 当我的应用取消通知时,使用 FLAG_INSISTENT 通知播放的声音不会停止

java - 将项目导入 Eclipse 但不导入工作区文件夹

java - ListView:删除项目之间的空格,并限制 ListView 中的项目数量

iphone - 使用加速度计或陀螺仪计数步骤