markerview无法使用mpandroid图表库

时间:2017-01-04 12:18:16

标签: android mpandroidchart

我想在点击图表时显示xy值。我遵循了所有步骤,但仍然无法正常工作。有什么问题吗?

这是我的代码

    LineData data = new LineData(getDataSet());

    chart.setData(data);
    chart.setDrawMarkerViews(true);
    chart.setTouchEnabled(true);
    chart.getDescription().setEnabled(false);
    chart.setOnChartGestureListener(this);
    chart.setHighlightPerTapEnabled(true);
    CustomMarkerView mv = new CustomMarkerView(this,R.layout.custom_marker_view_layout);
    mv.setChartView(chart);
    mv.setOffset(-mv.getMeasuredWidth() / 2, -mv.getMeasuredHeight());
    chart.setMarkerView(mv);
    chart.setPinchZoom(false);
    chart.setDrawGridBackground(false);

以下是我的自定义标记视图代码

public class CustomMarkerView extends MarkerView {

    private TextView tvContent;

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

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

    }


    @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.getY(), 0, true));
        }

        super.refreshContent(e, highlight);
    }

    @Override
    public MPPointF getOffset() {
        return new MPPointF(-(getWidth() / 2), -getHeight());
    }
}

3 个答案:

答案 0 :(得分:1)

我使用Toast这样做了。为了在我的课堂上实现这一点,我需要实现OnChartValueSelectedListener

public class MainPage implements OnChartValueSelectedListener

在创建图表期间,将选定值的侦听器设置为此类

mChart.setOnChartValueSelectedListener(this);

现在您需要覆盖onValueSelected并实现一些内容来显示您选择的项目。例如Toast:

@Override
public void onValueSelected(Entry e, Highlight h) {
    if(mCurrentToast != null)
    {
        mCurrentToast.cancel();
    }

    String res = String.format(Locale.ENGLISH, "Item: %f; Value: %.2f", e.getX(), e.getY());
    mCurrentToast = Toast.makeText(this, res, Toast.LENGTH_SHORT);
    mCurrentToast.show();
}

答案 1 :(得分:0)

您的CustomMarkerview没有显示,因为您没有突出显示任何值。

我已经使用barchart.highlightValue(...);解决了我的问题。请参见下面的代码:

@Override
public void onValueSelected(Entry e, Highlight h) {

        Highlight h1 = barchartCalories.getHighlighter().getHighlight(float x, float y);

        barchartCalories.highlightValue(h1);

        barchart.setMarkerView(new CustomMarkerView(activity,  R.layout.custom_marker_view));

}

答案 2 :(得分:-1)

不推荐使用setDrawMarkerViews和setMarkerView,可以使用下面的代码:

final CustomMarkerView mv = new CustomMarkerView(this,R.layout.custom_marker_view_layout);
mv. setChartView (chart);
chart.setMarker(mv);