2016-08-29 8 views
2

В моем приложении у меня есть некоторые гистограммы с использованием MPAndroidChart, когда я касаюсь в одном баре, открывается действие, показывающее некоторую информацию о выбранном значении. Для этого я использую «OnChartValueSelectedListener».MPAndroidChart long click listener

Проблема в том, что это слишком разумно касаться. Когда я касаюсь экрана только для его прокрутки, если я касаюсь одним значением, открывается одно действие.

Я ищу что-то вроде «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); 
     } 
    }); 

ответ

0

Ваше решение предполагает создание класса, который реализует OnChartGestureListener

Глядя на связанных Javadocs выше, вы можете сразу увидеть, есть метод:

void onChartLongPressed(MotionEvent me); 

Вам понадобится реализовать этот метод с требуемой функциональностью. Вероятно, это связано с получением исходных точек касания пикселя от MotionEvent и преобразования их в значения x и y на диаграмме. Затем вы можете открыть соответствующую деятельность согласно вашему требованию. Ссылаясь на this answer мы можем сделать это так:

@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 внутри example project here