当前位置: 首页 > 知识库问答 >
问题:

在MPAndroidChart,如何添加点击事件的每个栏在条形图?

施令雪
2023-03-14

我正在使用MPAndroidChart库来实现条形图,如何实现条形图中每个条的点击侦听器。我想在Toast中显示点击的bar值。如何实现这个?

mChart = (BarChart) findViewById(R.id.chart1);
mChart.setDrawYValues(true);
mChart.setDrawValueAboveBar(true);
mChart.setDescription("");
mChart.setMaxVisibleValueCount(10);
mChart.set3DEnabled(false);

mChart.setPinchZoom(false);
mChart.setUnit(" mg/dL");
mChart.setDrawGridBackground(false);
mChart.setDrawHorizontalGrid(true);
mChart.setDrawVerticalGrid(false);
mChart.setValueTextSize(10f);
mChart.setDrawBorder(false);


XLabels xl = mChart.getXLabels();
xl.setPosition(XLabelPosition.BOTTOM);
xl.setSpaceBetweenLabels(10);
xl.setCenterXLabelText(true);

YLabels yl = mChart.getYLabels();
yl.setLabelCount(8);
yl.setPosition(YLabelPosition.LEFT);

setData();

Legend l = mChart.getLegend();
l.setPosition(LegendPosition.BELOW_CHART_RIGHT);
l.setFormSize(8f);
l.setXEntrySpace(4f);

mChart.animateY(3000);


private void setData() {

    ArrayList<String> xVals = new ArrayList<String>();
    xVals.add("F");
    xVals.add("PP");
    xVals.add("U");
    xVals.add("C");
    xVals.add("TC");
    xVals.add("Tri");
    xVals.add("HDL");
    xVals.add("LDL");
    xVals.add("VLDL");

    ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry>();
    yVals1.add(new BarEntry(95, 0));
    yVals1.add(new BarEntry(99, 1));
    yVals1.add(new BarEntry(19, 2));
    yVals1.add(new BarEntry((float) 1.21, 3));
    yVals1.add(new BarEntry(250, 4));
    yVals1.add(new BarEntry(323, 5));
    yVals1.add(new BarEntry(47, 6));
    yVals1.add(new BarEntry(135, 7));
    yVals1.add(new BarEntry(68, 8));


    BarDataSet set1 = new BarDataSet(yVals1, "");
    //set1.setColors(ColorTemplate.VORDIPLOM_COLORS);
    set1.setColors(new int[]{R.color.green,R.color.green,R.color.green,R.color.green,R.color.margin,R.color.red,R.color.green,R.color.green,R.color.green},getApplicationContext());
    set1.setBarSpacePercent(50f);

    ArrayList<BarDataSet> dataSets = new ArrayList<BarDataSet>();
    dataSets.add(set1);

    BarData data = new BarData(xVals, dataSets);

    mChart.setData(data);
}

共有2个答案

闽承望
2023-03-14

您需要实现OnChartValueSelectedListener。单击此处获取该类的javadoc。

这里有一个来自MPAndroidChart演示项目的示例(使用MPAndroidChart 3.0.2)

@Override
public void onValueSelected(Entry e, Highlight h) {
    Log.i("VAL SELECTED",
            "Value: " + e.getY() + ", xIndex: " + e.getX()
                    + ", DataSet index: " + h.getDataSetIndex());
}

@Override
public void onNothingSelected() {
}
邹慈
2023-03-14

尝试实现mpandroidchart库中存在的OnChartValueSelectedListener

 类似资料:
  • 我刚刚开始使用Chart.js,我很快就变得非常沮丧。我有我的堆叠条形图工作,但是我不能让点击“事件”工作。 我在图表中找到了对GitHub的评论。js声明使用函数<code>getBarsAtEvent 我在画布元素上设置了一个事件监听器(正确的方式): ...然而在我的< code>handleClick函数中,< code > chart . getbarsatevent 是未定义的! 现在

  • 下面是.java文件中的代码

  • 问题内容: 我是React的新手,对某种基本的东西感到困惑。 我需要在单击事件后呈现DOM之后将组件添加到DOM。 我最初的尝试如下,但是没有用。但这是我想尝试的最好的方法。(预先为将jQuery与React混合使用而道歉。) 希望我已经清楚需要做什么,希望您能帮助我获得适当的解决方案。 问题答案: 正如@Alex McMillan所提到的那样,使用state来指示应在dom中呈现的内容。 在下面

  • 问题内容: 需要查看条形图中的条形所代表的确切值,而不是Y轴上的近似值。 怎么可能呢? 谢谢阅读! 问题答案: 在iReport 3.7.6中,您可以仅选中BarPlot属性下的“显示标签”框。 在以前的版本(3.1.4)中,我必须创建一个ChartCustomizer类。 如果您需要格式化标签中的数字(例如,设置为百分比,添加千位分隔符等),那么即使在新版本中,您也绝对需要一个ChartCust

  • 我刚刚开始学习为Android编码和开发。 现在,我正在尝试这样做:Project Fi App UI然而,我在MPAndroidChart库中找不到参数或方法来设置条形图(或我正在使用的水平条形图)中条形图的比例。条形图中的条形图只是自动决定其比例。我想要的是一个固定的Y轴最大范围,图中条形的比例根据其值而变化。 另一个问题是,我无法摆脱每个酒吧上的标签。我写道 但条的右边仍然有一个值。 包含条