對於需要使用加速度計識別手勢的類項目。 我目前在x,y和z值上使用了明確的if語句方法。Android加速度計 - 動態時間扭曲
我讀過Dynamic Dynamic Wrapping是一種更高效的方式,因爲它檢查手勢和以前存儲的手勢之間的匹配。
我該如何去編碼這在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");
}
}