首页 > 解决方案 > 根据与每个轴android的对齐方式更改颜色

问题描述

我有一个功能,根据手机与每个轴(X、Y、Z)的对齐方式,背景颜色会发生变化。例如,如果它与 X 对齐,则背景为绿色。我正在使用两个传感器(加速度计和磁场)来获取旋转角度俯仰、滚动和方位角,但我不了解这些值或如何正确执行。我正在考虑手机是否与轴对齐,如果它从手机的顶部穿过中间穿过手机的底部,基本上,如果轴以手机为中心(不确定是否清晰)。感谢您提供的任何帮助。

        orientationEventListener = new SensorEventListener() {
            public void onSensorChanged(SensorEvent event) {
                switch (event.sensor.getType()) {
                    case Sensor.TYPE_MAGNETIC_FIELD:
                        mags = event.values.clone();
                        break;
                    case Sensor.TYPE_ACCELEROMETER:
                        accels = event.values.clone();
                        break;
                }

                if (mags != null && accels != null) {
                    gravity = new float[9];
                    magnetic = new float[9];
                    SensorManager.getRotationMatrix(gravity, magnetic, accels, mags);
                    float[] outGravity = new float[9];
                    SensorManager.remapCoordinateSystem(gravity, SensorManager.AXIS_X,SensorManager.AXIS_Z, outGravity);
                    SensorManager.getOrientation(outGravity, values);

                    azimuth = values[0] * 57.2957795f;
                    pitch =values[1] * 57.2957795f;
                    roll = values[2] * 57.2957795f;
                    mags = null;
                    accels = null;
                }

                Fragment fragment = (CanvasFragment) getSupportFragmentManager().findFragmentById(R.id.canvasFragment);
               //getSupportActionBar().setTitle("Azimuth: " + azimuth + ", Pitch: " + pitch + ", Roll: " + roll);
                //Aligned with Y?
                if (((-90 > azimuth && azimuth > -70) || (90 > azimuth && azimuth > 70)) && ((180 < roll && roll < 160) || (-180 < roll && roll < -160))
                && ((90 < pitch && pitch < 80) || (-90 < pitch && pitch < -80))) {
                    fragment.getView().setBackgroundColor(Color.RED);
                }
            }

            @Override
            public void onAccuracyChanged(Sensor sensor, int i) {

            }
        };

标签: javaandroid-studioandroid-fragmentsandroid-sensors

解决方案


推荐阅读