MPAndroidChart长按一下监听器

时间:2016-08-29 18:15:02

标签: android charts mpandroidchart

在我的应用程序中,我有一些使用MPAndroidChart的条形图,当我触摸一个栏时会打开一个活动,显示有关所选值的一些信息。我正在使用“OnChartValueSelectedListener”来做到这一点。

问题在于触摸太明智了。当我触摸屏幕只是为了滚动它,如果我触摸一个值,则会打开一个活动。

我正在寻找像“OnLongClickListener”这样的东西,以避免每次触摸栏时都要打开活动。但我找不到任何东西。有一些方法可以在MP Android Chart上模仿“长触摸值”吗?

这是我的代码的一部分:

mChart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {
        @Override
        public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {
            // registra o estado da selecao para chamar esta funcao na funcao onNothingSelected
            entry = e;
            index = dataSetIndex;
            highlight = h;
            // caso algum cliente tenha sido cadastrado no dia selecionado
            if(e.getVal() > 0) {
                ViewUtil.exibirMensagemAguarde(R.string.aguarde, R.string.carregando_dados, OverviewActivity.this);
                // guarda os dados para serem usados pelo metodo onNothingSelected
                entry = e;
                index = dataSetIndex;
                highlight = h;
                // obtem o ano atual
                int currentYear = Calendar.getInstance().get(Calendar.YEAR);
                // obtem o dia selecionado e concatena o ano atual
                dateSelected = xVals.get(h.getXIndex()) + "/" + currentYear;
                // chama a tarefa assincrona que obtem os clientes cadastrados no dia selecionado
                // e abre a activity
                ClientesCadastradosDiaAsync task = new ClientesCadastradosDiaAsync();
                task.execute();
            }

        }

        @Override
        public void onNothingSelected(){
            onValueSelected(entry, index, highlight);
        }
    });

1 个答案:

答案 0 :(得分:0)

您的解决方案将涉及创建一个实现OnChartGestureListener

的类

查看上面链接的javadoc,您可以立即看到有一个方法:

build.gradle

您必须使用所需的功能实现此方法。它可能涉及从void onChartLongPressed(MotionEvent me); 获取原始像素触摸点并将它们转换为图表上的x和y值。然后,您可以根据您的要求打开相应的活动。参考this answer,我们可以这样做:

MotionEvent

example project here

中有一个自定义@Override public void onChartLongPressed(MotionEvent me) { float tappedX = me.getX(); float tappedY = me.getY(); MPPointD point = mChart.getTransformer(YAxis.AxisDependency.LEFT).getValuesByTouchPoint(tappedX, tappedY); Log.d(TAG, "long pressed at: " + point.x + "," + point.y); //TODO: check for long presses that don't correspond to a value on the chart //launch the Activity as per your requirement } 的示例