Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MPAndroidChart长单击侦听器_Android_Charts_Mpandroidchart - Fatal编程技术网

MPAndroidChart长单击侦听器

MPAndroidChart长单击侦听器,android,charts,mpandroidchart,Android,Charts,Mpandroidchart,在我的应用程序中,我使用了一些条形图,当我触摸一个条形图时,会打开一个活动,显示有关所选值的一些信息。我正在使用“OnChartValueSelectedListener”来实现这一点 问题在于,这一点太过明智,无法触及。当我触摸屏幕只是为了滚动时,如果我触摸一个值,就会打开一个活动 我正在寻找类似“OnLongClickListener”的东西,以避免每次触摸这些条时都打开活动。但我什么也找不到。有什么方法可以在MP Android图表上模拟“长触摸值” 这是我代码的一部分: mChart.s

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

问题在于,这一点太过明智,无法触及。当我触摸屏幕只是为了滚动时,如果我触摸一个值,就会打开一个活动

我正在寻找类似“OnLongClickListener”的东西,以避免每次触摸这些条时都打开活动。但我什么也找不到。有什么方法可以在MP Android图表上模拟“长触摸值”

这是我代码的一部分:

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);
        }
    });

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

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

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

@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
}

中有一个自定义
OnChartGestureListener的示例,您的解决方案将涉及创建一个实现

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

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

@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
}