Android Accelerometer积累

时间:2013-04-04 06:16:21

标签: android accelerometer

我在运行时间内连续获得加速度计值(即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);
    }

}

1 个答案:

答案 0 :(得分:2)

您的代码是正确的,只需要进行微小的更改,我已经使用名为refreshValues()的额外方法更新了代码。此方法将X,Y的最新值设置为TextView。将从onSensorChanged()方法调用此方法。

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)));
    }

}