Показывать постоянно изменяющиеся данные просмотра текста в графике - PullRequest
0 голосов
/ 14 февраля 2020

Привет, ребята, я сделал приложение из android, в моем приложении я реализовал датчик, значения датчика отображаются в текстовом виде, 3 вида текста используются в датчике, и эти значения постоянно меняются, теперь я хочу показать эти данные текстового обзора в линейном графике, как это возможно? мой код датчика ID:

public class MainActivity extends AppCompatActivity implements SensorEventListener {
    private TextView xTV;
    private TextView yTV;
    private TextView zTV;
    private ProgressBar mProgress;

    private SensorManager sensorManager = null;
    private float[] geomag = new float[3];
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        setContentView(R.layout.activity_main);
        xTV = (TextView) findViewById(R.id.xTV);
        yTV = (TextView) findViewById(R.id.yTV);
        zTV = (TextView) findViewById(R.id.zTV);
        GraphView graph = (GraphView) findViewById(R.id.graph);
        // data
               // Initialise values.
        xTV.setText("X: 0.00");
        yTV.setText("Y: 0.00");
        zTV.setText("Z: 0.00");

        // Setup progress bar value.
        mProgress = (ProgressBar) findViewById(R.id.progress_bar);
        mProgress.setMax(100);
    }

    public void onSensorChanged(SensorEvent sensorEvent) {
        synchronized (this) {
            geomag = sensorEvent.values.clone();

            if (geomag != null) {

                xTV.setText("X: "+Float.toString(geomag[0]));
                yTV.setText("Y: "+Float.toString(geomag[1]));
                zTV.setText("Z: "+Float.toString(geomag[2]));

                mProgress.setProgress(getProgressBarValue(geomag[0]));

                //Metal detected.
                if( Math.abs(geomag[0]) > 50){
                    playAlarm();
                }
            }
        }
    }

    public void onAccuracyChanged(Sensor arg0, int arg1) {
        // TODO Auto-generated method stub

    }

    @Override
    protected void onResume() {
        super.onResume();

        // Register this class as a listener for the sensors.
        sensorManager.registerListener(this,
                sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),
                SensorManager.SENSOR_DELAY_GAME);

    }

    @Override
    protected void onStop() {
        super.onStop();

        // Unregister the listener
        sensorManager.unregisterListener(this);
    }

    /**
     * Method to play an alarm sound to signal half time or full time.
     */
    private void playAlarm() {
        MediaPlayer mp = MediaPlayer.create(MainActivity.this, R.raw.buzzer);

        if(!mp.isPlaying()){ //If mediaplayer is not already playing.

            mp.start();
            mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

                @Override
                public void onCompletion(MediaPlayer mp) {
                    mp.release();
                }

            });
        }

    }

    /**
     * Takes in a sensor value and returns a value to set the
     * progress bar to depending on the sensor value.
     * @param sensorValue
     * @return
     */
    private int getProgressBarValue(float sensorValue){
        sensorValue = Math.abs(sensorValue);

        if(sensorValue >= 10 &&  sensorValue < 30)
            return 15;
        else if(sensorValue >= 30 &&  sensorValue < 50)
            return 30;
        else if(sensorValue >= 30 &&  sensorValue < 50)
            return 30;
        else if(sensorValue >= 50 &&  sensorValue < 70)
            return 50;
        else if(sensorValue >= 70 &&  sensorValue < 100)
            return 75;
        else if(sensorValue >= 100)
            return 99;
        else
            return 0;
    }

Так что, пожалуйста, помогите мне решить эту проблему

...