天天看點

MPAndroidChart 線條顔色漸變

金融類或一些正常應用通常需要畫折線圖,無論是折線圖還是直方圖、散點圖,都有比較成熟的第三方庫來實作,其中GitHub上star最多的圖表庫就是philJay的MPAndroidChart,關于它的一些介紹不在本文的讨論範圍,想要了解這個庫的朋友可以直接去https://github.com/PhilJay/MPAndroidChart 這個位址檢視。

本文要解決的問題是如何畫漸變色的線。以折線為例。我們知道LineDataSet代表一條線,不難發現它有一個屬性 lineDataSet.setGradientColor(startColor, endColor),如果從字面上了解,就是設定線條的漸變色,這不就是我們要的嗎!然而實際測試發現,線條的顔色并沒有變成漸變色,那麼是什麼原因呢?直覺的猜測是這個方法沒有實作,那麼是不是呢?

循着源碼,我們終于找到渲染線條的類了。在MPAndroidChart源碼com/github/mikephil/charting/render/LineChartRender.java 注意到這個方法drawLinear

MPAndroidChart 線條顔色漸變

看裡面的實作應該就是渲染線條的實作,通過第二個參數dataSet能擷取應用中指派的屬性,自然包含GradientColor屬性。但是縱觀整個方法,都沒有使用這個屬性。至此,折線圖設定漸變色無效的原因找到了,就是沒有實作。那我們如何實作setGradientColor這個方法呢?

很簡單,在canvas.drawLines(mLineBuffer, 0, size, mRenderPaint) 畫線之前,加上這麼一段:

if (dataSet.getGradientColor() != null)
{
    GradientColor gradientColor = dataSet.getGradientColor();
    mRenderPaint.setShader(
            new LinearGradient(
                    0,
                    0,
                    0,
                    mChart.getHeight(),
                    gradientColor.getStartColor(),
                    gradientColor.getEndColor(),
                    Shader.TileMode.CLAMP));
}
           

重新測試,線條的顔色變成了漸變。