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);
Author by
PT_C
Updated on July 31, 2022Comments
-
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 about 7 yearsThank 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 about 6 yearsfinal 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);