MpAndroidChart 中 xAxis 上的自定义标签指标
Custom label indicators on xAxis in MpAndroidChart
我正在使用一个名为 MPAndroidChart 的图表库,它可以满足我的大部分需求。但是,我需要自定义一些部分。
- 我想在
xAxis
上为标签绘制一些指示线,如下所示:
正如我挖掘的那样,我可以写一个 CustomAxisRenderer
但似乎我需要复制大部分 super
class 代码。
- 我希望精确地在
xAxis
上绘制最小值。此最小值也可以是 0 或任何其他数字。
如何做到这一点?甚至可以做到吗?
如有任何帮助或提示,我们将不胜感激。
我解决了第一个问题:
internal class IndicatorAxisRenderer(
viewPortHandler: ViewPortHandler,
xAxis: XAxis,
trans: Transformer
) : XAxisRenderer(viewPortHandler, xAxis, trans) {
private var indicatorWidth = 1f
private var indicatorHeight = 1f
private fun getXLabelPositions(): FloatArray {
var i = 0
val positions = FloatArray(mXAxis.mEntryCount * 2)
val centeringEnabled = mXAxis.isCenterAxisLabelsEnabled
while (i < positions.size) {
if (centeringEnabled) {
positions[i] = mXAxis.mCenteredEntries[i / 2]
} else {
positions[i] = mXAxis.mEntries[i / 2]
}
positions[i + 1] = 0f
i += 2
}
mTrans.pointValuesToPixel(positions)
return positions
}
override fun renderAxisLine(c: Canvas?) {
super.renderAxisLine(c)
val positions = getXLabelPositions()
var i = 0
while (i < positions.size) {
val x = positions[i]
if (mViewPortHandler.isInBoundsX(x)) {
val y = mViewPortHandler.contentBottom()
c?.drawLine(
x, y,
x, y + indicatorHeight,
mAxisLinePaint
)
}
i += 2
}
}
fun setIndicatorSize(width: Float, height: Float) {
this.indicatorWidth = width
this.indicatorHeight = height
}
}
此代码在 xAxis 的顶部呈现指示线。
我正在使用一个名为 MPAndroidChart 的图表库,它可以满足我的大部分需求。但是,我需要自定义一些部分。
- 我想在
xAxis
上为标签绘制一些指示线,如下所示:
正如我挖掘的那样,我可以写一个 CustomAxisRenderer
但似乎我需要复制大部分 super
class 代码。
- 我希望精确地在
xAxis
上绘制最小值。此最小值也可以是 0 或任何其他数字。
如何做到这一点?甚至可以做到吗?
如有任何帮助或提示,我们将不胜感激。
我解决了第一个问题:
internal class IndicatorAxisRenderer(
viewPortHandler: ViewPortHandler,
xAxis: XAxis,
trans: Transformer
) : XAxisRenderer(viewPortHandler, xAxis, trans) {
private var indicatorWidth = 1f
private var indicatorHeight = 1f
private fun getXLabelPositions(): FloatArray {
var i = 0
val positions = FloatArray(mXAxis.mEntryCount * 2)
val centeringEnabled = mXAxis.isCenterAxisLabelsEnabled
while (i < positions.size) {
if (centeringEnabled) {
positions[i] = mXAxis.mCenteredEntries[i / 2]
} else {
positions[i] = mXAxis.mEntries[i / 2]
}
positions[i + 1] = 0f
i += 2
}
mTrans.pointValuesToPixel(positions)
return positions
}
override fun renderAxisLine(c: Canvas?) {
super.renderAxisLine(c)
val positions = getXLabelPositions()
var i = 0
while (i < positions.size) {
val x = positions[i]
if (mViewPortHandler.isInBoundsX(x)) {
val y = mViewPortHandler.contentBottom()
c?.drawLine(
x, y,
x, y + indicatorHeight,
mAxisLinePaint
)
}
i += 2
}
}
fun setIndicatorSize(width: Float, height: Float) {
this.indicatorWidth = width
this.indicatorHeight = height
}
}
此代码在 xAxis 的顶部呈现指示线。