Очевидно, класс LineChartRenderer
хранит кэш растровых изображений для круговых растровых изображений для каждого набора данных.
Новые растровые изображения создаются, если этот метод в LineChartRenderer
возвращает значение true.
/**
* Sets up the cache, returns true if a change of cache was required.
*
* @param set
* @return
*/
protected boolean init(ILineDataSet set) {
int size = set.getCircleColorCount();
boolean changeRequired = false;
if (circleBitmaps == null) {
circleBitmaps = new Bitmap[size];
changeRequired = true;
} else if (circleBitmaps.length != size) {
circleBitmaps = new Bitmap[size];
changeRequired = true;
}
return changeRequired;
}
Следовательно, даже если новый цвет установлен с помощью setCircleColor()
или setCircleHoleColor()
, новые растровые изображения не создаются, поэтому на диаграмме отображаются старые цветные круги.
Эту проблему можно решить либо с помощью
- Очистка массива кэша растрового изображения.(Невозможно импортировать библиотеку как модуль, так как
circleBitmaps
является личным)
2.Используя пользовательский LineChartRenderer
3. Путем обмана init()
способ вернуть истину.Таким образом, чтобы динамически изменить цвет круга, используйте
mDataSet.setDrawCircles(true);
int colorCount= mDataSet.getCircleColors().size();
mDataSet.resetCircleColors();
mDataSet.setCircleColor(color);
if(colorCount==1){mDataSet.getCircleColors().add(color);}
вместо
mDataSet.setCircleColor(color);
и чтобы изменить цвет отверстия круга динамически , используйте
mDataSet.setCircleColorHole(color);
int circleColor= mDataSet.getCircleColors().get(0);
int colorCount = mDataSet.getCircleColors().size();
mDataSet.resetCircleColors();
mDataSet.setCircleColor(circleColor);
if(colorCount==1){mDataSet.getCircleColors().add(circleColor);}
вместо
mDataSet.setCircleColorHole(color);
ПРИМЕЧАНИЕ. Это работает, только если вы планируете использовать один цвет круга!Протестировано на MpChartAndroid v3.0.2
Спасибо @cristallo за помощь.