MpAndroidChart中xAxis上的自定义标签指示器

时间:2020-09-16 16:54:54

标签: android mpandroidchart

我正在使用一个名为MPAndroidChart的图表库,它可以满足我的大多数需求。但是,我需要自定义一些部分。

  1. 我想像这样在xAxis上为标签画一些指标线:

enter image description here

在挖洞时,我可以写一个CustomAxisRenderer,但似乎我需要复制大多数super类代码。

  1. 我希望最小值精确地绘制在xAxis上。此最小值可以是0或其他任何数字。

enter image description here

这怎么办?甚至有可能做到吗?

任何帮助或提示将不胜感激。

1 个答案:

答案 0 :(得分: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顶部呈现指示器线。