AndroidPlot FixedSizeEditableXYSeries Как использовать

Я новичок в Android и очень новичок в сюжете Android. Можете ли вы указать мне пример, в котором используется FixedSizeEditableXYSeries?

Моя цель — создать потоковую диаграмму, показывающую последние показания датчика в приложении для Android.

Спасибо

===================Обновление - после обсуждения с @Nick=====================

public class MainActivity extends AppCompatActivity {


    // Create the redrawer so that the plot is updated
    private Redrawer redrawer;

    // create the message receiver - data is received via broadcasts
    private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            // Get extra data included in the Intent
            String message = intent.getStringExtra("CurrentHR");

            Log.d("ReceivedHR ",message);

            // Now put the new data point at the end of the FixedSizeEditableXYSeries, move all data points by 1.
            for (int index=0;index<9;index++){

                if(index<9){
                    hrHistory.setY(hrHistory.getY(index+1),index);
                }else{
                    hrHistory.setY(Float.parseFloat(message),9);
                }
            }


        }
    };

    // create a few references
    private XYPlot xyPlot;
    private FixedSizeEditableXYSeries hrHistory;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_heart_rate);

        // Now find the plot views
        xyPlot = (XYPlot)findViewById(R.id.xyPlot);

        // Declare the local broadcast manager
        LocalBroadcastManager.getInstance(this).registerReceiver(
                mMessageReceiver, new IntentFilter("hrUpdate"));


        // now put in some data
        hrHistory = new FixedSizeEditableXYSeries("HR",10);

        xyPlot.addSeries(hrHistory, new LineAndPointFormatter(Color.GREEN,Color.RED,null,null));
        xyPlot.setRangeBoundaries(40, 120, BoundaryMode.FIXED);
        xyPlot.setDomainBoundaries(0, 20, BoundaryMode.FIXED);
    }

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


        // set a redraw rate of 1hz and start immediately:
        redrawer = new Redrawer(xyPlot, 1, true);
    }
}

Это дает мне хороший график, но без линии. Не похоже, что график обновляется, поскольку новые данные заполняют FixedSizeEditableXYSeries.


person MadProgrammer    schedule 16.02.2017    source источник
comment
как вы хотите показать поток данных? Существует два популярных подхода: прокрутка, при которой данные непрерывно перемещаются по экрану слева направо или справа налево (например, монитор использования ЦП) и, за неимением лучшего названия, сканирование места, где данные заполняют экран слева направо, пока не достигается конец экрана, и в этот момент он сбрасывается обратно к началу экрана, перезаписывая предыдущие данные в каждом индексе по мере продвижения. (Хорошим примером этого является ЭКГ.)   -  person Nick    schedule 17.02.2017
comment
@Nick, я хотел бы непрерывно перемещать данные слева направо на экране (я думаю, вы называете это прокруткой здесь). Теперь я обновлю вопрос с помощью моего существующего кода, чтобы вы могли видеть больше.   -  person MadProgrammer    schedule 18.02.2017


Ответы (1)


Если вам нужна прокрутка, то FixedSizeEditableXYSeries будет неправильным выбором; по мере прокрутки ваших данных вы, по сути, ставите в очередь самое новое значение и удаляете из очереди самое старое значение; структура типа связанного списка была бы лучшим выбором.

Вы можете либо реализовать XYSeries и поддержать его любой подходящей структурой данных, которую вы предпочитаете, либо вы можете использовать SimpleXYSeries, который уже поддерживает операции с очередями а-ля removeFirst() и addLast(...). В демонстрационном приложении есть отличный пример графика динамической прокрутки: OrientationSensorExampleActivity. Строки 235 -245 показывают конкретные действия, упомянутые выше.

person Nick    schedule 17.02.2017