In MPAndroidChart Library, How to wrap X Axis Labels to two lines when long?

前端 未结 6 771
误落风尘
误落风尘 2020-12-05 07:32

I am trying to show X axis label to go to 2 lines when they are long. How to achieve this in LineChart? See screenshot below. I want time to go to second line instead of sta

6条回答
  •  鱼传尺愫
    2020-12-05 08:08

    For those like me who want to achieve this but keep the original library, here is a simple solution inspired by @fgueli's modifications. This applies for one break line only (add "\n" in your labels) but you can easily adapt it to your needs.

    1. Subclass XAxisRenderer

      public class CustomXAxisRenderer extends XAxisRenderer {
          public CustomXAxisRenderer(ViewPortHandler viewPortHandler, XAxis xAxis, Transformer trans) {
               super(viewPortHandler, xAxis, trans);
          }
      
          @Override
          protected void drawLabel(Canvas c, String formattedLabel, float x, float y, MPPointF anchor, float angleDegrees) {
              String line[] = formattedLabel.split("\n");
              Utils.drawXAxisValue(c, line[0], x, y, mAxisLabelPaint, anchor, angleDegrees);
              Utils.drawXAxisValue(c, line[1], x + mAxisLabelPaint.getTextSize(), y + mAxisLabelPaint.getTextSize(), mAxisLabelPaint, anchor, angleDegrees);
          }
      }
      

    1. Set this renderer on the desired chart

      lineChart.setXAxisRenderer(new CustomXAxisRenderer(lineChart.getViewPortHandler(), lineChart.getXAxis(), lineChart.getTransformer(YAxis.AxisDependency.LEFT)));
      

    1. Enjoy!

提交回复
热议问题