これは私が電話の揺れをキャプチャするために使用しているコードです:
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の背後にあるロジックを説明できますか?これらは電話の場所の観点から、そしてどのように私がフェーンをあなたの手でねじるのではなく「握手」に応答させることができるかを説明できますか?
そのようなコードのアイデアはありますか?