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;
}
});
以下是一些澄清问题的图片。图表显示在CardView
s内,如您所见,所有侧面都有足够的空间。前两张图片是使用ValueFormatter
设置拍摄的,后两张图片是没有它的。
答案 0 :(得分:0)
可能你有一些错误,这里有一些解决方案:
1)设置RadarChart
参数后设置雷达数据,然后拨打invalidate()
;
2)在AxisMinimum
和AxisMaximum
radarChart.getXAxis()
和radarChart.getYAxis()
3)在第2步之后致电yAxis.calculate(min,max)
;
4)如果需要,请使用radarChart.setExtraOffsets(?,?,?,?)
我正在使用com.github.PhilJay:MPAndroidChart:v3.0.1
答案 1 :(得分: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;
}
});