MPAndroidChart出现问题。 我有一个带有CardChar内的LineChart的RecyclerView项。 recyclerView位于片段中。第一次显示片段时,第一次显示的折线图绘制不正确。我尝试删除并再次显示该片段。第一个节目中的线宽和圆半径是第二个节目的一半,此后的很多倍。有时,第一次显示中的圆圈根本没有画出来。而且只有在应用程序从头开始时才会发生。该图表非常基本,属性较少,因此我无法找出原因。
折线图视图xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="240dp"
android:layout_margin="8dp"
app:cardCornerRadius="5dp">
<com.github.mikephil.charting.charts.LineChart
android:id="@+id/line_chart"
android:layout_margin="8dp"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.v7.widget.CardView>
初始化图表线数据的函数:
public void initChartData() {
this.lineDataSet = new LineDataSet(entries, title);
lineDataSet.setDrawCircles(true);
lineDataSet.setColor(Color.RED);
lineDataSet.setCircleColor(Color.RED);
lineDataSet.setDrawIcons(false);
// line thickness and point size
lineDataSet.setCircleRadius(2f);
lineDataSet.setLineWidth(1f);
// draw points as solid circles
lineDataSet.setDrawCircleHole(false);
// customize legend entry
lineDataSet.setFormLineWidth(1f);
//lineDataSet.setFormLineDashEffect(new DashPathEffect(new float[]{10f, 5f}, 0f));
lineDataSet.setFormSize(15.f);
lineDataSet.setValueTextSize(9f);
lineDataSet.setDrawValues(false);
ArrayList<ILineDataSet> dataSets = new ArrayList<>();
dataSets.add(lineDataSet);
this.data = new LineData(dataSets);
}
图表ViewHolder:
public ChartItemViewHolder(@NonNull View itemView) {
super(itemView);
this.view = itemView;
lineChart = view.findViewById(R.id.line_chart);
lineChart.clearAllViewportJobs();
lineChart.clear();
lineChart.setBackgroundColor(Color.WHITE);
lineChart.getDescription().setEnabled(false);
lineChart.setTouchEnabled(true);
lineChart.setDrawGridBackground(false);
lineChart.setDragEnabled(true);
lineChart.setScaleEnabled(true);
lineChart.setPinchZoom(false);
lineChart.getAxisRight().setEnabled(false);
lineChart.setExtraBottomOffset(8);
Legend l = lineChart.getLegend();
l.setForm(Legend.LegendForm.LINE);
}
适配器:
@Override
public void onBindViewHolder(@NonNull final ChartItemViewHolder chartItemViewHolder, int i) {
chartItemViewHolder.item = itemList.get(i);
chartItemViewHolder.lineChart.getXAxis().setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
return CommonUtils.toTimeString((long) value+chartItemViewHolder.item.getRefTimeStamp());
}
});
chartItemViewHolder.lineChart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, "CLICKED", Toast.LENGTH_SHORT).show();
}
});
chartItemViewHolder.lineChart.clear();
chartItemViewHolder.lineChart.setData(chartItemViewHolder.item.getLineData());
}
答案 0 :(得分:0)
请务必致电
Utils.init(context)
在设置线宽之前至少一次。
例如,在应用程序的onCreate()方法中。
setLineWidth方法需要具有设备的指标。 为此,它使用Utils类,但是如果未初始化,它将返回您的值而无需应用转换。
发生这种情况时实际上会记录一个错误:
E / MPChartLib-Utils:未初始化的实用程序。在调用Utils.convertDpToPixel(...)之前,您至少需要调用Utils.init(...)。否则转换不会发生。