MarkerView未显示使用MPAndroidChart

mus*_*ica 7 android mpandroidchart

我正在使用MPandroidchart在我的应用程序中显示折线图.我添加了以下代码来显示标记视图,但它没有显示

private void initializeChart(LineChart chart, String chartName) {
    // Chart view
    chart.setDrawGridBackground(false);
    chart.setDescription("");
    chart.getLegend().setEnabled(true);
    //chart.setTouchEnabled(false);
    int color = getResources().getColor(R.color.white);
    chart.getAxisLeft().setTextColor(color); // left y-axis
    chart.getXAxis().setTextColor(color);

    chart.setTouchEnabled(true);
    CustomMarkerView mv = new CustomMarkerView(this.getActivity(), R.layout.marker_view_tv);
    chart.setMarkerView(mv);

    //X axis
    XAxis xAxis = chart.getXAxis();
    xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
    xAxis.setDrawGridLines(false);
    xAxis.setDrawLabels(true);

    //Y axis
    YAxis leftAxis = chart.getAxisLeft();
    YAxis rightAxis = chart.getAxisRight();
    rightAxis.setDrawLabels(false);
    rightAxis.setDrawGridLines(false);
    leftAxis.setDrawLabels(true);
    leftAxis.setDrawGridLines(false);
    leftAxis.setStartAtZero(false);

    SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(getActivity());


    leftAxis.setLabelCount(Constants.KEY_LINE_YAXIS_SCALECOUNT, true);
    ChartItem item = CannonJsonParser.parseCanonJson(act, act.res);
    int maxYVal = pref.getInt(Constants.KEY_YAXIS_VALUE, 0);
    leftAxis.setAxisMaxValue(maxYVal);
    leftAxis.setAxisMinValue(0);
    setLineData(item, chartName);
    // set data
    chart.setData(lineData);

    chart.getLegend().setEnabled(false);
    //animate
    //chart.animateX(2000, Easing.EasingOption.EaseInExpo);
    chart.setDragEnabled(true);
    chart.setScaleXEnabled(true);
    chart.setScaleYEnabled(false);
    chart.setHighlightPerDragEnabled(false);
    chart.setHighlightPerTapEnabled(false);


}
Run Code Online (Sandbox Code Playgroud)

我的CustomMarkerView类

public class CustomMarkerView extends MarkerView {
private TextView tvContent;

public CustomMarkerView(Context context, int layoutResource) {
    super(context, layoutResource);

    tvContent = (TextView) findViewById(R.id.tvContent);
}

// callbacks everytime the MarkerView is redrawn, can be used to update the
// content (user-interface)
@Override
public void refreshContent(Entry e, Highlight highlight) {

    if (e instanceof CandleEntry) {

        CandleEntry ce = (CandleEntry) e;

        tvContent.setText("" + Utils.formatNumber(ce.getHigh(), 0, true));
    } else {

        tvContent.setText("" + Utils.formatNumber(e.getVal(), 0, true));
    }
}

@Override
public int getXOffset(float xpos) {
    // this will center the marker-view horizontally
    return -(getWidth() / 2);
}

@Override
public int getYOffset(float ypos) {
    // this will cause the marker-view to be above the selected value
    return -getHeight();
}
Run Code Online (Sandbox Code Playgroud)

}

注意:我使用片段来显示图表.

Phi*_*oda 7

MarkerView没有显示,因为您没有在图表中突出显示任何条目。将MarkerView只显示为高亮显示的条目。

由于您禁用了每次点击突出显示条目的功能(通过调用chart.setHighlightPerTapEnabled(false)),您只能以编程方式突出显示值,如下所示:

chart.highlightValue(...)

更多关于文档中的内容


小智 5

面临类似的问题。您应该调用super刷新markerview。关于Kotlin的示例:

 class CustomMarkerView(context: Context, layoutResource: Int) : MarkerView(context, layoutResource) {

    override fun refreshContent(e: Entry?, highlight: Highlight?) {
        markerDate.text = e?.data.toString()
        markerValue.text = e?.y.toString()
        super.refreshContent(e, highlight)
    }
}
Run Code Online (Sandbox Code Playgroud)