在MPChart中设置X轴上的日期格式

时间:2017-12-05 05:57:37

标签: android charts mpandroidchart

这里尝试在x轴上设置日期。我正在将 Unix时间戳 传递到 LineChart 的入口点,但是没有得到输出无法正确的结果是输出。

事实证明,由于Entries使用了浮点数,我的时间戳上的精度正在下降......足以弄乱x轴上标签之间的间隔。 enter image description here

此处代码

 mChart.getDescription().setEnabled(false);
    mChart.setTouchEnabled(true);
    mChart.setDragDecelerationFrictionCoef(0.5f);
    mChart.setDragEnabled(true);
    mChart.setScaleEnabled(true);
    mChart.setDrawGridBackground(false);
    mChart.setHighlightPerDragEnabled(false);
    mChart.setBackgroundColor(Color.WHITE);
    mChart.setViewPortOffsets(0f, 0f, 0f, 0f);
    MonthPriceGraph = new ArrayList<>();
    final ArrayList<String> Xdate = new ArrayList<>();

    MonthPriceGraph = dataBaseManager.getPrice(Contants.getSymbol());
    if (MonthPriceGraph.size() != 0) {
        ArrayList<Entry> values = new ArrayList<Entry>();
        for (int i = 0; i < MonthPriceGraph.size(); i++) {

            Xdate.add(MonthPriceGraph.get(i).getCoinCCTime());
            long t = Long.parseLong(MonthPriceGraph.get(i).getCoinCCTime());
            Log.e(TAG, "Time is: " + MonthPriceGraph.get(i).getCoinCCTime());
            float yValue = Float.parseFloat(MonthPriceGraph.get(i).getCoinCCPrice());
            values.add(new Entry(Float.parseFloat(MonthPriceGraph.get(i).getCoinCCTime()), yValue));
        }

        LineDataSet set1 = new LineDataSet(values, "ETH");
        set1.setAxisDependency(YAxis.AxisDependency.LEFT);

        set1.setColor(Color.BLUE);
        set1.setValueTextColor(Color.BLUE);
        set1.setLineWidth(2.5f);
        set1.setDrawCircles(true);
        set1.setDrawFilled(true);
        set1.setDrawValues(false);
        set1.setCircleColor(getActivity().getResources().getColor(R.color.blue));
        set1.setFillColor(getActivity().getResources().getColor(R.color.gry_color));
        set1.setHighLightColor(Color.rgb(0, 0, 255));
        set1.setDrawCircleHole(false);
        LineData data = new LineData(set1);
        data.setValueTextColor(Color.BLACK);
        data.setValueTextSize(5f);
        // set data
        mChart.setData(data);
        mChart.invalidate();
        Legend l = mChart.getLegend();
        l.setEnabled(false);
        XAxis xAxis = mChart.getXAxis();
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM_INSIDE);
        Typeface tf = Typeface.createFromAsset(getActivity().getAssets(), "fonts/worksenslight.ttf");
        xAxis.setTypeface(tf);
        xAxis.setTextSize(12f);
        xAxis.setAvoidFirstLastClipping(true);
        xAxis.setTextColor(Color.BLUE);
        xAxis.setDrawAxisLine(true);
        xAxis.setDrawGridLines(true);
        xAxis.setTextColor(Color.rgb(0, 0, 0));
        xAxis.setCenterAxisLabels(false);
        xAxis.setValueFormatter(new IAxisValueFormatter() {

            private SimpleDateFormat mFormat = new SimpleDateFormat("dd MMM,yyyy");

            @Override
            public String getFormattedValue(float value, AxisBase axis) {

                Date s = new Date((long) (value * 1000L));
                return mFormat.format(s);
            }
        });
        YAxis leftAxis = mChart.getAxisLeft();
        leftAxis.setPosition(YAxis.YAxisLabelPosition.INSIDE_CHART);
        leftAxis.setTypeface(tf);
        leftAxis.setTextSize(12f);
        leftAxis.setTextColor(ColorTemplate.getHoloBlue());
        leftAxis.setDrawGridLines(true);
        leftAxis.setGranularityEnabled(false);
        leftAxis.setAxisMinimum(8000);
        leftAxis.setAxisMaximum(12000);

        leftAxis.setYOffset(-9f);
        leftAxis.setTextColor(Color.rgb(0, 0, 0));
        YAxis rightAxis = mChart.getAxisRight();
        rightAxis.setEnabled(false);
        rightAxis.setEnabled(false);

如何解决这个问题。 错误的输出得分为Image。 第一个日期是: 2017年8月8日 2017年8月12日

像这样的模式想要显示图像

1 个答案:

答案 0 :(得分:0)

尝试一下,这对我有用

XAxis xAxis = lineChart.getXAxis();

        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        xAxis.setDrawGridLines(false);
        xAxis.setValueFormatter(new IndexAxisValueFormatter(getAreaCount));

        public ArrayList<String> getAreaCount() {

                    ArrayList<String> label = new ArrayList<>(); 
                    for (int i = 0; i < areaList.size(); i++)  //your date arraylist
                        label.add(areaList.get(i).getTopicName()); //your date
                    return label;
                }