项目需要曲线图显示效果,这里使用的是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);
}
问题解决,最后第一点击效果: