安卓加速度计累积

3

我在运行时不断获取加速度计的值(即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);
    }

}

没听懂你的问题。你想要实现什么? - Nezam
他的应用程序可能被强制关闭了。while循环的条件始终为真。 - Hoan Nguyen
我无法获取X、Y、Z的刷新值。 - user2243468
只想累加运行时的XYZ值。 - user2243468
@user2243468,请尝试这段代码,如果您还有任何问题,请告诉我。 - Lucifer
1个回答

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

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接