参考这篇博文
没啥好说的,就是把陀螺仪的偏移量给计算出来拿来用
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
mSensorManager.registerListener(mSensorEventListener, mSensor, SensorManager.SENSOR_DELAY_GAME);
}
private SensorManager mSensorManager;
private Sensor mSensor;
@Override
protected void onResume() {
super.onResume();
mSensorManager.registerListener(mSensorEventListener, mSensor, SensorManager.SENSOR_DELAY_GAME);
}
@Override
protected void onPause() {
super.onPause();
mSensorManager.unregisterListener(mSensorEventListener);
}
private float timestamp = 0;
private float angle[] = new float[3];
private static final float NS2S = 1.0f / 1000000000.0f;
private float gx = 0,gy = 0,gz = 0;
private SensorEventListener mSensorEventListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
if (sensorEvent.accuracy != 0) {
int type = sensorEvent.sensor.getType();
switch (type) {
case Sensor.TYPE_GYROSCOPE:
if (timestamp != 0) {
final float dT = (sensorEvent.timestamp - timestamp) * NS2S;
angle[0] += sensorEvent.values[0] * dT;
angle[1] += sensorEvent.values[1] * dT;
angle[2] += sensorEvent.values[2] * dT;
float anglex = (float) Math.toDegrees(angle[0]);
float angley = (float) Math.toDegrees(angle[1]);
float anglez = (float) Math.toDegrees(angle[2]);
if(gx != 0){
float c = gx - anglex;
if(Math.abs(c) >= 0.5 ){
Log.d("================", "anglex------------>" + (gx - anglex));
gx = anglex;
}
}else{
gx = anglex;
}
if(gy != 0){
float c = gy - angley;
if(Math.abs(c) >= 0.5 ){
Log.d("================", "anglex------------>" + (gy - angley));
gy = angley;
}
}else{
gy = angley;
}
// if(gz != 0){
// Log.d("================", "anglex------------>" + (gz - anglez));
// }
gz = anglez;
}
timestamp = sensorEvent.timestamp;
break;
}
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}
};
}
z轴的话把手机放平了然后旋转手机就会有很大的数值变化了