MPAndroidChart динамически изменяет диапазон YAxis - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь повторить то, что 'Buffalo Chart Demo' делает в их диаграмме. Идея состоит в том, что масштабирование работает только на XAxis и YAxis, динамически масштабируемых для отображения только видимого диапазона XAxis.

Я написал код, который использует класс Listen для обнаружения перетаскивания и масштабирования диаграммы. Во время этого он попытается изменить размер диапазона Yaxis, чтобы увеличить диапазон отображаемых значений:

public void setUpGraph()
    {
        {   // // Chart Style // //

            // background color
            chart.setBackgroundColor(Color.WHITE);

            // disable description text
            chart.getDescription().setEnabled(false);

            // enable touch gestures
            chart.setTouchEnabled(true);

            // set listeners
            //chart.setOnChartValueSelectedListener(this);
            chart.setDrawGridBackground(false);

            // enable scaling and dragging
            chart.setDragEnabled(true);
            // chart.setScaleEnabled(true);
            chart.setScaleXEnabled(true);
            chart.setScaleYEnabled(false);

            // force pinch zoom along both axis
            //chart.setPinchZoom(true);
        }

        XAxis xAxis;
        {   // // X-Axis Style // //
            xAxis = chart.getXAxis();

            // vertical grid lines
            //xAxis.enableGridDashedLine(10f, 10f, 0f);
        }

        YAxis yAxis;
        {   // // Y-Axis Style // //
            yAxis = chart.getAxisLeft();

            // disable dual axis (only use LEFT axis)
            chart.getAxisRight().setEnabled(false);

            // horizontal grid lines
            yAxis.enableGridDashedLine(10f, 10f, 0f);

            // axis range
//            yAxis.setAxisMaximum(300f);
//            yAxis.setAxisMinimum(150f);
            chart.setVisibleYRange(150 ,250,yAxis.getAxisDependency());
        }


        {   // // Create Limit Lines // //

            // draw limit lines behind data instead of on top
            yAxis.setDrawLimitLinesBehindData(true);
            xAxis.setDrawLimitLinesBehindData(true);

            //xAxis.addLimitLine(llXAxis);
        }

        //chart.setAutoScaleMinMaxEnabled(false);
        chart.zoom(100,1,0,0);
        chart.setOnChartGestureListener(this);
    }
    @Override
    public void onChartTranslate(MotionEvent me, float dX, float dY) {
        adjustChartDisplay();
    }

    public void adjustChartDisplay()
    {
        float xmin = chart.getLowestVisibleX();
        float xmax = chart.getHighestVisibleX();
        float ymin = Float.MAX_VALUE;
        float ymax = Float.MIN_VALUE;

        for(AggregatedWeightRecord wr:live_data.getValue())
        {
            if(xmin <= wr.getDay() && wr.getDay() <= xmax)
            {
                ymin = Math.min(ymin,(float)wr.getMinimumWeight());
                ymax = Math.max(ymax,(float)wr.getMaximumWeight());
            }
        }

//        ymax += 2;
//        ymin -= 2;

        Log.i("TEST",""+ymin+" " + ymax);


        chart.getAxisLeft().setAxisMinimum(ymin);
        chart.getAxisLeft().setAxisMaximum(ymax);
        chart.invalidate();
    }
}

Я также вызываю это на всех других вызываемых событиях. Однако это не работает :(. Когда я делаю простое перетаскивание, никаких изменений не происходит. Изменения происходят только в КОНЦЕ МАСШТАБИРОВАНИЯ.

Что мне не хватает? Какие решения и методы я могу попробовать?

...