大きな画像を水平にスクロールするAndroidアプリを開発しています。私は回転角を得るために、加速度計(Sensor.TYPE_ACCELEROMETER)と磁場(Sensor.TYPE_MAGNETIC_FIELD)データを使用しました。このデータはノイズが頻繁に発生するため、スムーズなモーションエフェクトを実装することはできません。X軸に沿って携帯電話の角度を回転
@Override
public void onSensorChanged(SensorEvent event) {
switch (event.sensor.getType()) {
case Sensor.TYPE_MAGNETIC_FIELD:
mags = event.values.clone();
break;
case Sensor.TYPE_ACCELEROMETER:
accels = event.values.clone();
break;
}
if (mags != null && accels != null) {
gravity = new float[16];
boolean success = SensorManager.getRotationMatrix(gravity, null, accels, mags);
if (success) {
float[] outGravity = new float[16];
SensorManager.remapCoordinateSystem(gravity, SensorManager.AXIS_X, SensorManager.AXIS_Z, outGravity);
SensorManager.getOrientation(outGravity, values);
rollingAverage[0] = roll(rollingAverage[0], values[0]);
rollingAverage[1] = roll(rollingAverage[1], values[1]);
rollingAverage[2] = roll(rollingAverage[2], values[2]);
azimuth = Math.toDegrees(values[0]);
pitch = Math.toDegrees(values[1]);
roll = Math.toDegrees(values[2]);
mags = null;
accels = null;
double diffRoll = lastRoll - roll;
double diffPitch = lastPitch - pitch;
long curTime = System.currentTimeMillis();
if (Math.abs(diffRoll) >= 2) {
if (diffRoll > 0)
imageView.panLeft();
else
imageView.panRight();
lastRoll = roll;
}
}
}
}
他の方法でこれを達成するためのアイデアはありますか?
加速度センサーはノイズの多いセンサーです。フィルタリング/スムーズにするDSPアルゴリズムを使用しない限り、あなたはどこにでもジャンプします。ロール()関数でこれを実行しようとしているように見えますが、あなたが何をしているのかを知るには、それを確認する必要があります。 –
これはモーションゲームやVRでどのように達成されますか? – Sameer