【问题标题】:MPAndroidChart RadarChart collapses itselfMPAndroidChart RadarChart 自行折叠
【发布时间】:2016-05-09 10:01:04
【问题描述】:

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

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

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 拍摄的,后两张是没有拍摄的。

【问题讨论】:

  • 你解决了吗?
  • 不,还没有;我会尝试更新 lib 版本,从那以后有一些重大更新。
  • 这个问题用最新的库代码解决了吗?

标签: android mpandroidchart radar-chart


【解决方案1】:

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

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

2) 在radarChart.getXAxis()radarChart.getYAxis() 中设置AxisMinimumAxisMaximum

3) 在第 2 步之后拨打yAxis.calculate(min,max)

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

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

【讨论】:

    【解决方案2】:

    这是我的解决方案

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多