2012-10-22 13 views
7

Iam lavora su un'app per Android e utilizza AChartEngine per la creazione di grafici a barre. Tutto funziona come dovrebbe, tranne che non riesco a capire quale barra del grafico viene toccata (non cliccato). Sembra che .getCurrentSeriesAndPoint() non funzioni all'interno di OnTouchListener. Ogni volta restituisce NULL. Quando utilizzo OnClickListener, tutto funziona correttamente, ma ho bisogno di sapere quale barra viene toccata (Action_Down e Action_Up) non cliccata.android achartengine - Come riconoscere quale barra viene toccata in un grafico a barre?

Is .getCurrentSeriesAndPoint() non funziona in un TouchListener in generale? C'è una soluzione alternativa o un altro modo per capire quale barra viene toccata?

mChartView.setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 

      SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint(); 


      SimpleSeriesRenderer r = new SimpleSeriesRenderer(); 
      switch(event.getAction()) { 
       case MotionEvent.ACTION_DOWN:{ 
         Toast.makeText(MainActivity.this, "DOWN", Toast.LENGTH_SHORT) .show();       
         if(seriesSelection != null) touchedBar = seriesSelection.getPointIndex(); 
         break;} 

       case MotionEvent.ACTION_UP:{ 
         Toast.makeText(MainActivity.this, "UP", Toast.LENGTH_LONG) .show();       
         touchedBar = 0; 
         break;} 
       default: break; 
      } 

      mRenderer.removeAllRenderers(); 
      r.setColor(Color.RED); 
      r.setSelectedBar(ClickedBar); 
      mRenderer.addSeriesRenderer(r);     
      mChartView.repaint(); 

      return true; 
     } 
    }); 

Cordiali saluti Christian

+0

Hi @ChristianR si può si prega di inviare l'intero codice. – user1844638

risposta

2

Dovrebbe funzionare con il tocco ascoltatore. Tuttavia, si devono ancora fare questo:

mRenderer.setClickEnabled(true); 

AChartEngine utilizza l'onTouchEvent internamente, quindi è possibile che il vostro evento di tocco viene chiamato dopo l'ACE uno, quindi questo potrebbe essere la causa per non ottenere i valori attesi.

+0

Grazie, ma ho già impostato mRenderer.setClickEnabled (true) prima nel mio codice. E non funziona ancora con l'ascoltatore touch. Non ottengo un valore da .getCurrentSeriesAndPoint(). – ChristianR

+0

Vedere la mia risposta aggiornata. –

+2

Qual è la risposta con la soluzione alternativa per favore? –

0

Quando si vuole toccare e clic lungo, è necessario impostare il:

mRenderer.setOnClickable(false) 
Problemi correlati