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无内容,之后的点击均正常显示:
在这里插入图片描述
解决办法:自定义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);
    }

问题解决,最后第一点击效果:
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值