在 BarChart MPAndroidChart 条形图外垂直旋转值文本
Rotate value text vertically outside bar in BarChart MPAndroidChart
在 BarChart
MPAndroidChart
栏外垂直旋转值文本
我可以旋转文本,但它进入了我使用以下代码实现的栏内:
chart.setRenderer(CustomBarChartRenderer(context, this, this.getAnimator(), this.getViewPortHandler()))
public class CustomBarChartRenderer extends BarChartRenderer {
public CustomBarChartRenderer(BarDataProvider chart,
ChartAnimator animator, ViewPortHandler viewPortHandler) {
super(chart, animator, viewPortHandler);
}
@Override
public void drawValue(Canvas canvas, IValueFormatter formatter,
float value, Entry entry, int dataSetIndex, float x, float y, int color) {
mValuePaint.setColor(color);
canvas.save();
canvas.rotate(-90);
canvas.drawText(formatter.getFormattedValue(value, entry,
dataSetIndex, mViewPortHandler), x, y, mValuePaint);
canvas.restore();
}
}
文本已旋转但出现在栏内可以在下面的图像 link 中看到:
如何使文本值在栏上方正确对齐?
我可以通过向上移动标签来修复它。
值得注意的是,当我们旋转标签时,x 和 y 尺寸会在内部发生变化,因此要向上移动标签,您必须增加 x 值而不是 y 值。
另请注意,要使其动态化并适用于所有文本长度,我正在计算要显示的文本的像素大小,并仅将标签向上移动该像素大小。请参见下面的代码(在 kotlin 中):
override fun drawValue(c: Canvas, formatter: IValueFormatter, value: Float, entry: Entry, dataSetIndex: Int, x: Float, y: Float, color: Int) {
mValuePaint.color = Color.WHITE
val text = formatter.getFormattedValue(value, entry, dataSetIndex, mViewPortHandler)
c.save()
val width = mValuePaint.measureText(text)
c.rotate(-90f, x, y)
c.drawText(text, x + (width / 2), y, mValuePaint)
c.restore()
}
在 BarChart
MPAndroidChart
我可以旋转文本,但它进入了我使用以下代码实现的栏内:
chart.setRenderer(CustomBarChartRenderer(context, this, this.getAnimator(), this.getViewPortHandler()))
public class CustomBarChartRenderer extends BarChartRenderer {
public CustomBarChartRenderer(BarDataProvider chart,
ChartAnimator animator, ViewPortHandler viewPortHandler) {
super(chart, animator, viewPortHandler);
}
@Override
public void drawValue(Canvas canvas, IValueFormatter formatter,
float value, Entry entry, int dataSetIndex, float x, float y, int color) {
mValuePaint.setColor(color);
canvas.save();
canvas.rotate(-90);
canvas.drawText(formatter.getFormattedValue(value, entry,
dataSetIndex, mViewPortHandler), x, y, mValuePaint);
canvas.restore();
}
}
文本已旋转但出现在栏内可以在下面的图像 link 中看到:
如何使文本值在栏上方正确对齐?
我可以通过向上移动标签来修复它。
值得注意的是,当我们旋转标签时,x 和 y 尺寸会在内部发生变化,因此要向上移动标签,您必须增加 x 值而不是 y 值。
另请注意,要使其动态化并适用于所有文本长度,我正在计算要显示的文本的像素大小,并仅将标签向上移动该像素大小。请参见下面的代码(在 kotlin 中):
override fun drawValue(c: Canvas, formatter: IValueFormatter, value: Float, entry: Entry, dataSetIndex: Int, x: Float, y: Float, color: Int) {
mValuePaint.color = Color.WHITE
val text = formatter.getFormattedValue(value, entry, dataSetIndex, mViewPortHandler)
c.save()
val width = mValuePaint.measureText(text)
c.rotate(-90f, x, y)
c.drawText(text, x + (width / 2), y, mValuePaint)
c.restore()
}