Setting the pie slice colors in MPAndroidChart

13,186

Solution 1

Found a work around:

final int[] MY_COLORS = {Color.rgb(192,0,0), Color.rgb(255,0,0), Color.rgb(255,192,0),Color.rgb(127,127,127), Color.rgb(146,208,80), Color.rgb(0,176,80), Color.rgb(79,129,189)};

ArrayList<Integer> colors = new ArrayList<Integer>();
        
for(int c: MY_COLORS) colors.add(c);
        
dataSet.setColors(colors);

Solution 2

use ContextCompat.getColor(context, R.color.green1) instead of R.color.green1 if not colors will not shown properly.

example code in Kotlin :

 val colorFirst = context?.let { ContextCompat.getColor(it, R.color.colorFirst) }
 val colorSecond = context?.let { ContextCompat.getColor(it, R.color.colorSecond) }
 val colorThird = context?.let { ContextCompat.getColor(it, R.color.colorThird) }

 pieDataSet.colors = mutableListOf(colorFirst, colorSecond, colorThird)

Solution 3

This way you can use proper color names from colors.xml:

    final int[] pieColors = {
            BaseActivity.getAppColor(R.color.blue),
            BaseActivity.getAppColor(R.color.SandyBrown),
            BaseActivity.getAppColor(R.color.silver),
            BaseActivity.getAppColor(R.color.FireBrick),
            BaseActivity.getAppColor(R.color.gray),
            BaseActivity.getAppColor(R.color.DarkMagenta),
            BaseActivity.getAppColor(R.color.olive),
            BaseActivity.getAppColor(R.color.MidnightBlue),
            BaseActivity.getAppColor(R.color.purple),
            BaseActivity.getAppColor(R.color.DeepSkyBlue),
            BaseActivity.getAppColor(R.color.maroon),
            BaseActivity.getAppColor(R.color.HotPink),
            BaseActivity.getAppColor(R.color.teal),
            BaseActivity.getAppColor(R.color.Purple),
            BaseActivity.getAppColor(R.color.green),
            BaseActivity.getAppColor(R.color.MediumSeaGreen)
    };

    ArrayList<Integer> colors = new ArrayList<>();
    for (int color : pieColors) {
        colors.add(color);
    }

    dataSet.setColors(colors);

    ...


public static int getAppColor(int resourceId) {
    Context context = MyApplication.getMyApplicationContext();
    int color;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        color = context.getResources().getColor(resourceId, context.getTheme());
    }
    else {
        //noinspection deprecation
        color = context.getResources().getColor(resourceId);
    }
    return color;
}

Solution 4

final int[] MY_COLORS = {
        Color.  rgb(0,255,255),
        Color. rgb(65,105,225)
};

ArrayList<Integer> colors = new ArrayList<>();

for(int c: MY_COLORS) colors.add(c);

dataSet.setColors(colors);
Share:
13,186
PT_C
Author by

PT_C

Updated on July 31, 2022

Comments

  • PT_C
    PT_C almost 2 years

    I need to define specific hex values for each slice in my pie chart.

    I'm following the wiki but the method doesn't seem to be working for PieDataSet

    PieDataSet dataSet = new PieDataSet(entries, "Fuel");
    dataSet.setColors(new int[] { R.color.green1, R.color.green2, R.color.green3, R.color.green4 }, Context);
    

    These errors are shown:

    Cannot resolve symbol 'green1'
    
    Expression expected  <-- At the 'Context'
    

    Is there an alternate way to set the pie slice color? This seems to work for Line charts but not for pie.

  • viper
    viper about 7 years
    Thank works great for me. I just want to know how to set default background color to a piedataset. Like for example if I have to show only 1 data in the piechart, i would want to set color to that 1 data and the rest of the part will have default color.
  • Harvin dutta
    Harvin dutta about 6 years
    final int[] MY_COLORS = { Color. rgb(0,255,255), Color. rgb(65,105,225) }; ArrayList<Integer> colors = new ArrayList<Integer>(); for(int c: MY_COLORS) colors.add(c); dataSet.setColors(colors); // dataSet.setColors(ColorTemplate.VORDIPLOM_COLORS); // data.setValueTextSize(13f); // data.setValueTextColor(Color.DKGRAY);