我在我的指南针应用程序中使用了一个 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));
.
.
.
}
};
会很高兴如果有人可以帮助我