X轴标签中的DateTime不能正常工作 MPAndroidChart

问题描述 投票:0回答:1

我正在使用MPAndroidChart库实例创建实时折线图。联系 实时图表工作正常,我是把日期传给xAxis标签更新所有标签的时间图像屏幕截图

我的xAxis标签显示为01:00:21 01:00:21 01:00:21 01:00:21。

但我想xAxis标签是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;
        }

    }
}
android charts real-time mpandroidchart
1个回答
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;
        }

    }

© www.soinside.com 2019 - 2024. All rights reserved.