Xaxis 标签中的日期时间无法正常工作 MPAndroidChart

DateTime in Xaxis Label not working correctly MPAndroidChart

我正在使用 MPAndroidChart 库示例创建实时线图 link 实时图表工作正常,我正在将日期传递给 xAxis 标签更新所有标签同时图像 ScreenShot

I xAxis 标签显示 01:00:21 01:00:21 01:00:21 01:00:21

但是我想要xAxis Label是01:00:21 01:00:22 01:00:23 01:00:24 帮我解决问题救命

下面是我的代码

public class MainActivity extends AppCompatActivity  {
    private LineChart chart;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("RealtimeLineChartActivity");
        chart = findViewById(R.id.chart1);
        chart.getLegend().setEnabled(false);
        chart.getDescription().setEnabled(true);
        chart.setBackgroundColor(Color.LTGRAY);
        LineData data = new LineData();
        chart.setData(data);

        Legend l = chart.getLegend();
        l.setForm(Legend.LegendForm.LINE);
        l.setTextColor(Color.WHITE);

        XAxis xl = chart.getXAxis();
        xl.setTextColor(Color.WHITE);
        xl.setPosition(XAxis.XAxisPosition.BOTTOM);
        xl.setValueFormatter(new MyXAxisValueFormatter());
        xl.setAvoidFirstLastClipping(true);
        xl.setEnabled(true);
        xl.setTextSize(15f);

        YAxis leftAxis = chart.getAxisLeft();
        leftAxis.setTextColor(Color.WHITE);
        leftAxis.setAxisMaximum(100f);
        leftAxis.setAxisMinimum(0f);
        leftAxis.setDrawGridLines(true);

        YAxis rightAxis = chart.getAxisRight();
        rightAxis.setEnabled(false);
    }
    private void addEntry() {

        LineData data = chart.getData();
        if (data != null) {
            ILineDataSet set = data.getDataSetByIndex(0);
            if (set == null) {
                set = createSet();
                data.addDataSet(set);
            }

            data.addEntry(new Entry(set.getEntryCount(), (float) (Math.random() * 40) + 30f), 0);
            data.notifyDataChanged();
            chart.notifyDataSetChanged();
            chart.setVisibleXRangeMaximum(4);
            chart.moveViewToX(data.getEntryCount());
        }
    }

    private LineDataSet createSet() {

        LineDataSet set = new LineDataSet(null, "Dynamic Data");
        set.setAxisDependency(YAxis.AxisDependency.LEFT);
        set.setValueTextColor(Color.WHITE);
        set.setValueTextSize(9f);
        set.setDrawValues(false);
        return set;
    }

    private Thread thread;
    private void feedMultiple() {

        if (thread != null)
            thread.interrupt();
        final Runnable runnable = new Runnable() {

            @Override
            public void run() {
                addEntry();
            }
        };
        thread = new Thread(new Runnable() {

            @Override
            public void run() {
                for (int i = 0; i < 1000; i++) {

                    // Don't generate garbage runnables inside the loop.
                    runOnUiThread(runnable);

                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        });

        thread.start();
    }

    @Override
    protected void onStart() {
        feedMultiple();
        super.onStart();
    }

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

        if (thread != null) {
            thread.interrupt();
        }
    }

    public static class MyXAxisValueFormatter  implements IAxisValueFormatter {
        @Override
        public String getFormattedValue(float value, AxisBase axis) {
            Date date = new Date();
            SimpleDateFormat formatter = new SimpleDateFormat("hh:mm:ss");
            return formatter.format(date);
        }

        @Override
        public int getDecimalDigits() {
            return 0;
        }

    }
}

看起来日期实例只创建了一次并被使用了多次。我认为您应该在 getFormattedValue 回调中使用 value 参数来计算新的 x 轴值。您可以将初始日期定义为全局变量,并通过在其上添加 value 参数来计算 x 轴值。

所以代码必须是这样的:

    final Date initialDate = new Date();

    public static class MyXAxisValueFormatter  implements IAxisValueFormatter {
        @Override
        public String getFormattedValue(float value, AxisBase axis) {
            Calendar c = Calendar.getInstance();
            c.setTime(initialDate);
            c.add(Calendar.SECOND, Math.round(value));
            Date newDate = c.getTime();
            String formattedDate = new SimpleDateFormat("hh:mm:ss").format(newDate);
            return formattedDate;
        }

        @Override
        public int getDecimalDigits() {
            return 0;
        }

    }