Как назначить цвета срезов Piechart в предопределенном порядке, используя mpandroidchart? - PullRequest
0 голосов
/ 13 января 2020

Я создаю PieChart, используя следующий код:

   private fun populateDonutChart(responseDon: List<ResponseDon>, responseDist: List<ResponseDist>) {

        val brand = ArrayList<String>()
        var index = 0f
        var color_index = 0
        val data = PieData()
        val kpiValue = ArrayList<PieEntry>()
        val colorArray = IntArray(responseDonutChart.size)
        val myColorMap = HashMap<String, Int>()
        for (item in responseDonutChart) {

            kpiValue.add(PieEntry(item.kPIvalue.toFloat(), item.brand, index))
            brand.add(item.brand)

            if (color_index < 9)
                colorArray[color_index] = getColor(piechart.context, getColorID(color_index))
            else
                colorArray[color_index] = getColorID(color_index)

            myColorMap.put(item.brand, colorArray[color_index])

            index++
            color_index++
        }
        Log.e(TAG, "Colors: "+ myColorMap)

        val pieDataSet = PieDataSet(kpiValue, "MY Pie Chart")
        pieDataSet.setColors(*colorArray)

        val listColors = pieDataSet.colors
        Log.e(TAG, "Colors: from dataset "+ listColors)

        var indexColor = 0
        for ((key, value) in myColorMap) {
           myColorMap.put(key,listColors.get(indexColor))
            indexColor++
        }
        Log.e(TAG, "Colors: "+ myColorMap)
        filterSecondBarData(responseDistributionBarGraph, myColorMap)
        pieDataSet.sliceSpace = 2.5f
        pieDataSet.valueTextSize = 10f
        pieDataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE)
        data.addDataSet(pieDataSet)
        addDatatoPieChart(data)
    }

    private fun addDatatoPieChart(data: PieData) {
        piechart.data = data
        val legend = piechart.legend
        legend.isEnabled = false
        piechart.description.isEnabled = false
        piechart.animateXY(1500, 1500)
        piechart.setUsePercentValues(true)
        piechart.invalidate()
    }

Порядок / значение цветов в colorArray и myColorMap:

{MM=-800240, SG=-949048, SM=-12203864, LG=-5071618}

Но Piechart делает повторно - упорядочить этот порядок цветов следующим образом:

{SG=-800240, LG=-949048, SM=-12203864, MM=-5071618}

Здесь myColorMap - это HashMap, для которого мне необходимо назначить те же значения цвета для гистограммы позже. Я получил этот порядок цветов на круговой диаграмме, используя pieDataSet.colors, и вручную создал вышеупомянутый перестроенный HashMap для понимания читателя. Здесь значения SG, LG, SM, MM в круговой диаграмме: 13,35,27,25

Итак, как назначить цветовой код для среза или есть ли способ остановить эту перестановку, так как я необходимо назначить одинаковые цвета гистограмме.

...