Android 安卓加速度计累积

Android 安卓加速度计累积,android,accelerometer,Android,Accelerometer,我在运行时连续获得加速计值(即X和Y值)。我的问题是,当移动设备中的加速度计值发生变化时,应根据变化累积相应的值 这是我的代码: public class MainActivity extends Activity implements SensorEventListener { private SensorManager sensorManager; private float accumulation_x = 0; private float accumulatio

我在运行时连续获得加速计值(即X和Y值)。我的问题是,当移动设备中的加速度计值发生变化时,应根据变化累积相应的值

这是我的代码:

public class MainActivity extends Activity implements SensorEventListener {
    private SensorManager sensorManager;

    private float accumulation_x = 0;
    private float accumulation_y = 0;
    private float accumulation_z = 0;

    private TextView acessTextview, angleTextview;
    private float value;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById();

        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        sensorManager.registerListener(this,
                sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
                SensorManager.SENSOR_DELAY_NORMAL);

    }

    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }

    public void onSensorChanged(SensorEvent event) {

        if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {





            int count = 1;
                    while(count!=0){

                        float x = (float) 0.9887777;
                        float y = (float) 0.187359372; 
                        float z = (float) 0.0228636;

                float X_axis = (float) (x + (0.02724095));
                float Y_axis = (float) (y + (-0.027792556));
                float Z_axis = (float) (z - (0.105689));

                accumulation_x = accumulation_x + X_axis;
                accumulation_y = accumulation_y + Y_axis;
                accumulation_z = accumulation_z + Z_axis;

                value = (y / z);
                float angle = (float) Math.toDegrees(Math.atan(value));
                angleTextview.setText("Angle:" + angle);

                acessTextview.setText("accumulation_x  :" + X_axis + "\n"
                        + "accumulation_y :" + Y_axis + "\n"
                        + "accumulation_z  :" + Z_axis);

                count++;

                    }

        }

    }

    private void findViewById() {
        // TODO Auto-generated method stub
        acessTextview = (TextView) findViewById(R.id.accessTextview);
        angleTextview = (TextView) findViewById(R.id.angleTextview);
    }

}

您的代码是正确的,只需要稍作修改,我已经用一个名为refreshValues()的额外方法更新了您的代码。此方法将在TextView中设置X,Y的最新值。此方法将从onSensorChanged()方法调用


我不明白你的问题。你到底想实现什么?他的应用程序可能被迫关闭。while循环中的条件始终为true。我无法获得X、Y、Z中的刷新值。我只想累积运行时的XYZ值。@Lucifer:谢谢你提供的信息。。
public class MainActivity extends Activity implements SensorEventListener {
    private SensorManager sensorManager;

    private float accumulation_x = 0;
    private float accumulation_y = 0;
    private float accumulation_z = 0;

    private TextView acessTextview, angleTextview;
    private float value;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById();

        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        sensorManager.registerListener(this,
                sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
                SensorManager.SENSOR_DELAY_NORMAL);

    }

    public void onAccuracyChanged(Sensor sensor, int accuracy) {   }

    public void onSensorChanged(SensorEvent event) {

        if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {

            int count = 1;
                    while(count!=0){

                        float x = (float) 0.9887777;
                        float y = (float) 0.187359372; 
                        float z = (float) 0.0228636;

                float X_axis = (float) (x + (0.02724095));
                float Y_axis = (float) (y + (-0.027792556));
                float Z_axis = (float) (z - (0.105689));

                accumulation_x = accumulation_x + X_axis;
                accumulation_y = accumulation_y + Y_axis;
                accumulation_z = accumulation_z + Z_axis;

                value = (y / z);
                float angle = (float) Math.toDegrees(Math.atan(value));
                angleTextview.setText("Angle:" + angle);

                acessTextview.setText("accumulation_x  :" + X_axis + "\n"
                        + "accumulation_y :" + Y_axis + "\n"
                        + "accumulation_z  :" + Z_axis);

                count++;

                    }

        }

        refreshValues ( accumulation_x,accumulation_y );
    }

    private void findViewById() {
        // TODO Auto-generated method stub
        acessTextview = (TextView) findViewById(R.id.accessTextview);
        angleTextview = (TextView) findViewById(R.id.angleTextview);
    }

    private void refreshValues ( float x, float y )
    {
        acessTextview.setText ( String.valueOf(x) );
        angleTextview.setText( ( String.valueOf(y)));
    }

}