android - MpAndroidChart Line 第一次绘制不正确

标签 android mpandroidchart linechart

我在使用 MPAndroidChart 时遇到问题。 我有一个 RecyclerView,其中 CardView 中的 LineChart 作为一个项目。 recyclerView 位于 fragment 内。我第一次显示 fragment 时,折线图在第一次显示时没有正确绘制。我试图删除并再次显示该 fragment 。第一次展示中的线宽和圆半径与第二次和之后的许多次相比就像一半大小。有时第一次展示的圆圈根本就没有画出来。而且只有当应用程序从头开始时才会发生。该图表非常基础,属性较少,因此我找不到原因。

The image first time showing

The image second time showing

折线图 View 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());
}

最佳答案

一定要打电话

Utils.init(context)

在设置线宽之前至少一次。

例如在您的应用程序的 onCreate() 方法中。

setLineWidth 方法需要有设备的指标。 它为此目的使用 Utils 类,但如果它未初始化,它会在不应用转换的情况下返回您的值。

发生这种情况时实际上会记录一个错误:

E/MPChartLib-Utils: Utils NOT INITIALIZED. You need to call Utils.init(...) at least once before calling Utils.convertDpToPixel(...). Otherwise conversion does not take place.

关于android - MpAndroidChart Line 第一次绘制不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55271232/

相关文章:

android - D/ TextView : setTypeface with style : 0 comes and stuck the application

android - 在 MPAndroidChart 饼图中显示图像而不是文本

android - MPAndroidChart 线帽/结束样式

javascript - 为什么我的折线图在 chartjs 中倒退?

php - 如何为 Google 多折线图(php、mysql)做 mysql LEFT JOIN?

android - Android中的“正常警报”对话框

android - 不推荐使用 SlidingDrawer

java - 如何在服务器页面中复制文件而不读取

android - MPAndroidChart:组合图表

javascript - d3.js 折线图轴未正确显示数据