7

RadarChart我对标签有一些问题。具体来说,如果我使用长文本(例如 15-20 个字符),并且可用空间不是太大,则图表会折叠并且标签位于折叠图表内(但显然有更多可用空间)。

如果标签长度超过 5 个字符,我尝试使用ValueFormatter截断标签的标签轴,但正如我所见,图表大小计算基于完整标签文本,因为图表以我之前描述的相同方式折叠。

XAxis xAxis = radarChart.getXAxis();
xAxis.setValueFormatter(new XAxisValueFormatter() {
    @Override
    public String getXValue(String original, int index, ViewPortHandler viewPortHandler) {
        return original.length() > 5 ? original.substring(0, 5) + "…" : original;
    }
});

这里有一些图片来澄清这个问题。图表显示在CardViews 内,如您所见,四面都有足够的空间。前两张是有ValueFormatter套装的,后两张是没有的。

描述

描述

描述

描述

4

2 回答 2

1

可能你有一些错误,这里有一些解决方案:

1)设置RadarChart参数后设置雷达数据,然后调用invalidate()

2 ) 设置AxisMinimumAxisMaximumradarChart.getXAxis()radarChart.getYAxis()

3)第2步后调用yAxis.calculate(min,max)

4)如果需要使用radarChart.setExtraOffsets(?,?,?,?)

我正在使用 com.github.PhilJay:MPAndroidChart:v3.0.1

于 2017-03-15T18:00:57.490 回答
0

这是我的解决方案

public class MyRadarChart extends RadarChart {
public MyRadarChart(Context context) {
    super(context);
}

public MyRadarChart(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public MyRadarChart(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}

@Override
protected void init() {
    super.init();
    setXAxisRenderer();
}

private void setXAxisRenderer(){
    this.mXAxisRenderer = new MyXAxisRendererRadarChart(mViewPortHandler,mXAxis,this);
}}

import android.graphics.Canvas;
import com.github.mikephil.charting.charts.RadarChart;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.renderer.XAxisRendererRadarChart;
import com.github.mikephil.charting.utils.FSize;
import com.github.mikephil.charting.utils.MPPointF;
import com.github.mikephil.charting.utils.Utils;
import com.github.mikephil.charting.utils.ViewPortHandler;

public class MyXAxisRendererRadarChart extends XAxisRendererRadarChart {
public MyXAxisRendererRadarChart(ViewPortHandler viewPortHandler, XAxis xAxis, RadarChart chart) {
    super(viewPortHandler, xAxis, chart);
}

@Override
protected void drawLabels(Canvas c, float pos, MPPointF anchor) {
    super.drawLabels(c, pos, anchor);
}

@Override
protected void computeSize() {

    String longest = mXAxis.getLongestLabel();
    String line[] = longest.split("\n");
    if(line .length >1){
        longest = line[0];
    }

    mAxisLabelPaint.setTypeface(mXAxis.getTypeface());
    mAxisLabelPaint.setTextSize(mXAxis.getTextSize());

    final FSize labelSize = Utils.calcTextSize(mAxisLabelPaint, longest);

    final float labelWidth = labelSize.width;
    final float labelHeight = Utils.calcTextHeight(mAxisLabelPaint, "Q");

    final FSize labelRotatedSize = Utils.getSizeOfRotatedRectangleByDegrees(
            labelWidth,
            labelHeight,
            mXAxis.getLabelRotationAngle());


    mXAxis.mLabelWidth = Math.round(labelWidth);
    mXAxis.mLabelHeight = Math.round(labelHeight);
    mXAxis.mLabelRotatedWidth = Math.round(labelRotatedSize.width);
    mXAxis.mLabelRotatedHeight = Math.round(labelRotatedSize.height);

    FSize.recycleInstance(labelRotatedSize);
    FSize.recycleInstance(labelSize);

}

@Override
protected void drawLabel(Canvas c, String formattedLabel, float x, float y, MPPointF anchor, float angleDegrees) {
    String line[] = formattedLabel.split("\n");
    if(line .length >1){
        Utils.drawXAxisValue(c, line[0], x, y, mAxisLabelPaint, anchor, angleDegrees);
        Utils.drawXAxisValue(c, line[1], x + mAxisLabelPaint.getTextSize(), y + mAxisLabelPaint.getTextSize(), mAxisLabelPaint, anchor, angleDegrees);

    }else{
        super.drawLabel(c,formattedLabel,x,y,anchor,angleDegrees);
    }

}}

现在将布局文件中的 RadarChart 替换为 MyRadarChart 最后,setValueFormatter

 XAxis xAxis = radarChart.getXAxis();
    xAxis.setValueFormatter(new IAxisValueFormatter() {

        @Override
        public String getFormattedValue(float value, AxisBase axis) {
            String title = "you title";
            if(title.length()>6){
                title = title.substring(0,6)+"\n"+title.substring(6,title.length());
            }
            return title;
        }
    });
于 2018-07-17T10:14:02.683 回答