首页 文章

markerview无法使用mpandroid图表库

提问于
浏览
0

我想在单击图表上显示 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 回答

  • 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();
    }
    
  • 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));
    
    }
    
  • -1

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

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

相关问题