Это код, который я использую для захвата дрожания телефона:
public void onSensorChanged(SensorEvent event) {
Sensor mySensor = event.sensor;
if (mySensor.getType() == SensorManager.SENSOR_ACCELEROMETER) {
long curTime = System.currentTimeMillis();
// only allow one update every 100ms.
if ((curTime - lastUpdate) > 100) {
long diffTime = (curTime - lastUpdate);
lastUpdate = curTime;
x = event.values[SensorManager.DATA_X];
y = event.values[SensorManager.DATA_Y];
z = event.values[SensorManager.DATA_Z];
float speed = Math.abs(x+y+z - last_x - last_y - last_z)/ diffTime * 10000;
if (speed > SHAKE_THRESHOLD_HIGH) {
// yes, this is a shake action! Do something about it!
handshake_score.setText(String.valueOf(speed));
new AlertDialog.Builder(Handshake.this)
.setCancelable(true)
.setIcon(android.R.drawable.ic_dialog_info)
.setTitle("noo")
.setMessage("too much")
.setPositiveButton("OK!", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.cancel();
}
})
.show();
last_x = x;
last_y = y;
last_z = z;
} else if (speed > SHAKE_THRESHOLD_PASS) {
// yes, this is a shake action! Do something about it!
handshake_score.setText(String.valueOf(speed));
sensorMgr.unregisterListener(this);
new AlertDialog.Builder(Handshake.this)
.setCancelable(true)
.setIcon(android.R.drawable.ic_dialog_info)
.setTitle("HAHAA!")
.setMessage("good")
.setPositiveButton("OK!", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.cancel();
}
})
.show();
finish();
} else if (speed > SHAKE_THRESHOLD_SMALL) {
// yes, this is a shake action! Do something about it!
handshake_score.setText(String.valueOf(speed));
new AlertDialog.Builder(Handshake.this)
.setCancelable(true)
.setIcon(android.R.drawable.ic_dialog_info)
.setTitle("boo")
.setMessage("not enough")
.setPositiveButton("OK!", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.cancel();
}
})
.show();
last_x = x;
last_y = y;
last_z = z;
}
last_x = x;
last_y = y;
last_z = z;
}
}
}
Я хочу имитировать рукопожатие, чтобы оно реагировало на поднятие и опускание телефона при его удержании.по горизонтали, как если бы вы смотрели на ландшафтный экран и двигали его вверх и вниз.
Пока этот код повторяет поворот телефона, как будто вы поворачиваете телефон вокруг его оси длины.
Может кто-тообъясните логику координат x, y и z, используемых в этом коде, где они находятся с точки зрения места в телефоне и как я могу заставить фена реагировать на «рукопожатия», а не крутить его в руке.
есть идеи для такого кода?