'Setting the pie slice colors in MPAndroidChart
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.
Solution 1:[1]
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 2:[2]
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 3:[3]
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);
Solution 4:[4]
This way you can use colors from your colors.xml file
dataSet.setColors(getResources().getColor(R.color.colorPrimaryDark),
getResources().getColor(R.color.colorAccent),
getResources().getColor(R.color.greenShade),
getResources().getColor(R.color.colorPrimaryDark),
getResources().getColor(R.color.colorAccent),
getResources().getColor(R.color.greenShade));
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | user158 |
| Solution 2 | Lee Hounshell |
| Solution 3 | Alexander Farber |
| Solution 4 | Akshay Rajput |
