2016-12-08 4 views
1

Я хочу установить определенный цвет для строки в BarChart от MPAndroidChart. Я делаю все согласно документации, но цвет не меняется. Вот мой код:Невозможно установить цвет для BarChart в MPAndroidChart

barChart = (BarChart) findViewById(R.id.bar_chart); 
    List<BarEntry> entries = new ArrayList<BarEntry>(); 
    entries.add(new BarEntry(1.0f, 10.0f)); //tmp values 

    BarDataSet dataSet = new BarDataSet(entries, "bars"); 
    dataSet.setColor(R.color.red); //color from resourses 

    BarData barData = new BarData(dataSet); 

    barChart.setData(barData); 
    barChart.invalidate(); 

Самое смешное, что, прежде чем я пытался изменить цвет бара, бар был синий, после того, как я пытался изменить свой цвет, он стал серым цветом (независимо от того, какой цвет Это должно быть). Я не понимаю, почему цвет не меняется. Я также попытался переопределить метод getColor в классе BarDataSet, но результат тот же - бар серый.

Grey, but not red

ответ

2

Изменение этой линии,

dataSet.setColor(R.color.red); //resource id of a color 

к,

dataSet.setColor(getResources().getColor(R.color.red)); //resolved color 

При вызове setColor вам необходимо пройти в целое число, представляющее RGB тройная. R.color.red - это не тройка RGB, а целое число, представляющее ресурс в R.java.

Дополнительную информацию о различии между идентификатором ресурса и разрешенным цветом см. В разделе this question.

+0

Спасибо! Он отлично работает, но зачем мне писать таким образом? Что было не так в моем коде? И, кроме того, Android Studio говорит, что метод getColor устарел. Что я должен использовать вместо этого? –

+0

Я узнал, что я должен использовать 'ContextCompat.getColor()' вместо устаревших 'getResourses(). GetColor()', но первое quistion все еще остается. –

1
BarDataSet dataSet = new BarDataSet(entries, "bars"); 
    dataSet.setColors(ColorTemplate.MATERIAL_COLORS); 
1

Если вы хотите установить цвет, вы можете создать и массив цветов. Затем установите этот массив в Bardataset. Пример приведен ниже.

int[] colors = {Color.rgb(153, 193, 12), Color.rgb(179, 130, 76)}; 

    Bardataset.setColors(colors); 

Я думаю, вы должны написать свой код в этой последовательности. Посмотрите ниже:

 BarDataSet dataSet = new BarDataSet(entries, "bars"); 
     dataSet.setColor(Color.parseColor("#104E78")); 
     BarData barData = new BarData(dataSet); 

Попробуйте.

Смежные вопросы