LineChart监听器无法正常工作或我错过了什么

时间:2015-11-23 12:43:27

标签: mpandroidchart

我的问题是我设置了Chart.setOnChartValueSelectedListener但是当我点击值时没有任何动作。

我的代码是:

chart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {
            @Override
            public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {
                dataSets.get(dataSetIndex).setCircleColor(getResources().getColor(R.color.white));
                dataSets.get(dataSetIndex).setCircleColorHole(getResources().getColor(R.color.lavender_indigo));
            }

            @Override
            public void onNothingSelected() {
                dataSets.get(0).setCircleColor(getResources().getColor(R.color.gorse));
                dataSets.get(0).setCircleColorHole(getResources().getColor(R.color.gorse));
            }
        });

我想要这样的图表: enter image description here

图片不是来自app。只是设计部分。我想这样做。

1 个答案:

答案 0 :(得分:0)

很难从你提供的代码中看出来但我在调用chart.setHighlightPerTapEnabled(false)

时遇到了这个问题

如果第一眼看不清setHighlightPerTapEnabled方法也会禁用OnChartValueSelectedListener

,请从“突出显示”与“已选择”的名称中删除

我的解决方案是用OnChartValueSelectedListener替换OnChartGestureListener。以下是我实施的内容片段:

private class BarChartGestureListener implements OnChartGestureListener {
    private int _lastTappedIndex = -1;

    @Override
    public void onChartGestureStart(MotionEvent me, ChartTouchListener.ChartGesture lastPerformedGesture) {

    }

    @Override
    public void onChartGestureEnd(MotionEvent me, ChartTouchListener.ChartGesture lastPerformedGesture) {

    }

    @Override
    public void onChartLongPressed(MotionEvent me) {

    }

    @Override
    public void onChartDoubleTapped(MotionEvent me) {

    }

    @Override
    public void onChartSingleTapped(MotionEvent me) {
        final Entry entry = _barChart.getEntryByTouchPoint(me.getX(), me.getY());
        if (entry != null && _lastTappedIndex != entry.getXIndex()) {
            final Object data = entry.getData();
            if (Summary.class.isInstance(data)) {
                final Calendar calendar = DateUtils.newCalendar(((Summary) data).getDate());

                _spinnerMonth.setSelection(calendar.get(Calendar.MONTH));
            }

        }
    }

    @Override
    public void onChartFling(MotionEvent me1, MotionEvent me2, float velocityX, float velocityY) {

    }

    @Override
    public void onChartScale(MotionEvent me, float scaleX, float scaleY) {

    }

    @Override
    public void onChartTranslate(MotionEvent me, float dX, float dY) {

    }
}

onChartSingleTapped中,您可以获取被点击的Entry,并以编程方式突出显示它或您想要的任何其他内容。