【问题标题】:Set Date format on X axis in MPChart在 MPChart 的 X 轴上设置日期格式
【发布时间】:2019-11-04 19:41:24
【问题描述】:

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

事实证明,由于 Entries 使用浮点数,我的时间戳失去了精度……足以弄乱 x 轴上标签之间的间隔。

代码在这里

 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);

如何解决这个问题。 错误的输出获取为共享图像。 第一个日期是: 2017 年 8 月 8 日 2017 年 8 月 12 日

喜欢这个图案想展示图片

【问题讨论】:

    标签: android charts mpandroidchart


    【解决方案1】:

    试试这个,这对我有用

    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;
                    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-30
      • 2012-07-29
      • 1970-01-01
      • 1970-01-01
      • 2013-07-25
      相关资源
      最近更新 更多