Android错误之使用MPAndroid画曲线图自定MarkerView出现的问题

项目需要曲线图显示效果,这里使用的是GitHub上最火的图标库MPAndroid,GitHub地址:
https://github.com/PhilJay/MPAndroidChart

在给曲线图添加MarkerView时出现的小问题,自定义好LineChartMarkerView如下:

package com.zc.customview;

import android.content.Context;
import android.widget.TextView;
import com.github.mikephil.charting.components.MarkerView;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.highlight.Highlight;
import com.zc.road.R;

/**
 * 自定义LineChartMarkerView
 * @author zc
 */
public class LineChartMarkerView extends MarkerView {
    private TextView tvDate;
    private TextView tvValue;
    /**
     * Constructor. Sets up the MarkerView with a custom layout resource.
     *
     * @param context
     * @param layoutResource the layout resource to use for the MarkerView
     */
    public LineChartMarkerView(Context context, int layoutResource) {
        super(context, layoutResource);
        tvDate = findViewById(R.id.tv_date);
        tvValue = findViewById(R.id.tv_value);
    }

    @Override
    public void refreshContent(Entry e, Highlight highlight) {
        super.refreshContent(e, highlight);
        StringBuffer xBuffer = new StringBuffer();
        StringBuffer yBuffer = new StringBuffer();
        int xx = (int) e.getX();
        xBuffer.append("日期:");
        if (xx<10){
            xBuffer.append("0").append(xx).append("月");
        }else {
            xBuffer.append(xx).append("月");
        }
        yBuffer.append("水位:").append(e.getY()).append("m");
        tvDate.setText(xBuffer.toString());
        tvValue.setText(yBuffer.toString());
    }
}

然后设置MarkerView:

/**
     * 设置 可以显示X Y 轴自定义值的 MarkerView
     */
    public void setMarkerView() {
        LineChartMarkerView mv = new LineChartMarkerView(this, R.layout.line_chart_marker_view_layout);
        mv.setChartView(lineChart);
        lineChart.setMarker(mv);
        lineChart.invalidate();
    }

运行程序后第一次点击曲线图显示MarkerView无内容,之后的点击均正常显示:
Android错误之使用MPAndroid画曲线图自定MarkerView出现的问题_第1张图片
解决办法:自定义MarkerView时设置数据放在 super.refreshContent(e, highlight)方法之前

@Override
    public void refreshContent(Entry e, Highlight highlight) {
        StringBuffer xBuffer = new StringBuffer();
        StringBuffer yBuffer = new StringBuffer();
        int xx = (int) e.getX();
        xBuffer.append("日期:");
        if (xx<10){
            xBuffer.append("0").append(xx).append("月");
        }else {
            xBuffer.append(xx).append("月");
        }
        yBuffer.append("水位:").append(e.getY()).append("m");
        tvDate.setText(xBuffer.toString());
        tvValue.setText(yBuffer.toString());
        //设置数据在该方法之前
        super.refreshContent(e, highlight);
    }

问题解决,最后第一点击效果:
Android错误之使用MPAndroid画曲线图自定MarkerView出现的问题_第2张图片

你可能感兴趣的:(Android错误笔记)