-1

我在我的指南针应用程序中使用了一个 ImageView,当传感器值发生变化时它会旋转。问题是当设备达到 173 到 186 度角时,我的 ImageView 开始从 0-360 度角连续旋转。这个特殊问题是在我添加一段代码来降低 ImageView 的旋转速度之后开始的,然后这个应用程序运行得很好。

添加降低转速的方法

protected float[] lowPass( float[] input, float[] output ) {
    if ( output == null ) return input;

    for ( int i=0; i<input.length; i++ ) {
        output[i] = output[i] + ALPHA * (input[i] - output[i]);
    }
    return output;
}

调用方法的传感器事件侦听器

private SensorEventListener mySensorEventListener = new SensorEventListener() {
.
.
.
public void onSensorChanged(SensorEvent event) {
.
.
.
SensorManager.getOrientation(rotationMatrix, orientationValues);

    accelVals = lowPass( orientationValues, accelVals );

    azimuth = (int) Math.toDegrees(accelVals[0]);
    azimuth = (azimuth +360)%360;
    allowRotating=true;
    dialer.post(new RotateRunnable(azimuth));
.
.
.
}
};

会很高兴如果有人可以帮助我

4

1 回答 1

0

我的猜测是,当一个轴接近零时,您正在以一种不稳定的方式从笛卡尔坐标转换到极坐标。但也许它是 RotateRunnable 中的东西。

于 2012-08-08T23:14:34.963 回答