【发布时间】:2018-03-01 16:35:17
【问题描述】:
我正在使用 MPAndroidChart 库创建多个绘图并使用不同的数据源实时更新它们。我希望每个情节都有一条不同颜色的线。问题是,即使我为不同的图指定了另一种颜色,所有图都显示有相同颜色的线。此外,我需要使用不同的数据源更新每个图表,但我怀疑它们都只使用一个数据源,这向我表明,数据发生了同样的颜色问题。
这是我如何在我的活动文件中指定不同绘图的一部分
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:id="@+id/linearLayout">
<com.github.mikephil.charting.charts.LineChart
android:id="@+id/chart1"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/linearLayout"
android:id="@+id/linearLayout2">
<com.github.mikephil.charting.charts.LineChart
android:id="@+id/chart2"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
...
我有 8 个这样的图堆叠在一起,它们一个接一个地正确显示在我的应用程序上。然后在我的活动文件中,我像这样初始化它们中的每一个
OnChartValueSelectedListener ol = new OnChartValueSelectedListener(){
@Override
public void onValueSelected(Entry entry, Highlight h) {
//entry.getData() returns null here
}
@Override
public void onNothingSelected() {
}
};
mChart1 = (LineChart) findViewById(R.id.chart1);
mChart1.setOnChartValueSelectedListener(ol);
mChart2 = (LineChart) findViewById(R.id.chart2);
mChart2.setOnChartValueSelectedListener(ol);
...
然后当我收到数据时,我会这样做
LineData data1 = mChart1.getData();
if (data1 != null) {
ILineDataSet set1 = data1.getDataSetByIndex(0);
// set.addEntry(...); // can be called as well
if (set1 == null) {
set1 = createSet();
data1.addDataSet(set1);
}
data1.addEntry(new Entry(set1.getEntryCount(), f), 0);
data1.notifyDataChanged();
// let the chart know it's data has changed
mChart1.notifyDataSetChanged();
// limit the number of visible entries
mChart1.setVisibleXRangeMaximum(20);
// move to the latest entry
mChart1.moveViewToX(data1.getEntryCount());
}
LineData data2 = mChart2.getData();
if (data2 != null) {
ILineDataSet set2 = data2.getDataSetByIndex(0);
// set.addEntry(...); // can be called as well
if (set2 == null) {
set2 = createSet2();
data2.addDataSet(set2);
}
data2.addEntry(new Entry(set2.getEntryCount(), f), 0);
data2.notifyDataChanged();
// let the chart know it's data has changed
mChart2.notifyDataSetChanged();
// limit the number of visible entries
mChart2.setVisibleXRangeMaximum(20);
// move to the latest entry
mChart2.moveViewToX(data2.getEntryCount());
}
然后我有分配不同颜色的 createSet 函数
private LineDataSet createSet() {
LineDataSet set1 = new LineDataSet(null, "");
set1.setAxisDependency(YAxis.AxisDependency.LEFT);
set1.setColor(ColorTemplate.getHoloBlue());
set1.setCircleColor(Color.WHITE);
set1.setLineWidth(1f);
set1.setCircleRadius(1f);
set1.setFillAlpha(65);
set1.setFillColor(ColorTemplate.getHoloBlue());
set1.setHighLightColor(Color.rgb(244, 117, 117));
set1.setValueTextColor(Color.WHITE);
set1.setValueTextSize(0.1f);
set1.setDrawValues(false);
return set1;
}
private LineDataSet createSet2() {
LineDataSet set2 = new LineDataSet(null, "");
set2.setAxisDependency(YAxis.AxisDependency.LEFT);
set2.setColor(Color.GREEN);
set2.setCircleColor(Color.WHITE);
set2.setLineWidth(1f);
set2.setCircleRadius(1f);
set2.setFillAlpha(65);
set2.setHighLightColor(Color.rgb(44, 117, 117));
set2.setValueTextColor(Color.WHITE);
set2.setValueTextSize(0.1f);
set2.setDrawValues(false);
return set2;
}
您看到的设置颜色是一个设置为 getHoloBlue(),它是默认测试颜色,另一个设置为 Color.GREEN。问题是所有 8 个图都有 getHoloBlue 颜色。如果我在第一个 createSet 函数上添加另一种颜色,它们都会变为该颜色。
我是 Android 开发的新手,所以我确定我在这里遗漏了一些东西。
【问题讨论】:
标签: java android plot mpandroidchart real-time-updates