2012-10-22 12 views
7

Pracuję nad aplikacją dla systemu Android i korzystam z programu AChartEngine do tworzenia wykresów słupkowych. Wszystko działa tak, jak powinno, z wyjątkiem tego, że nie mogę określić, który pasek na wykresie jest dotknięty (nie kliknięty). Wygląda na to, że .getCurrentSeriesAndPoint() nie działa w OnTouchListener. Za każdym razem wraca NULL. Kiedy używam OnClickListener wszystko działa poprawnie, ale muszę wiedzieć, który pasek jest dotykany (Action_Down i Action_Up) nie kliknął.android achartengine - Jak rozpoznać, który pasek jest dotykany na wykresie słupkowym?

Czy .getCurrentSeriesAndPoint() nie działa w ogóle w TouchListener? Czy istnieje obejście lub inny sposób rozpoznania, który pasek jest dotykany?

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

poważaniem Christian

+0

Hi @ChristianR można proszę pisać cały kod. – user1844638

Odpowiedz

2

Powinien działać z dotykowym słuchacza. Jednak nadal trzeba to zrobić:

mRenderer.setClickEnabled(true); 

AChartEngine używa onTouchEvent wewnętrznie, więc możliwe jest, że to wydarzenie dotykowy jest wywoływana po ACE jednego, więc może to być przyczyną nie otrzymania oczekiwanych wartości.

+0

Dzięki, ale już ustawiłem mRenderer.setClickEnabled (true) wcześniej w moim kodzie. I nadal nie działa z słuchaczem dotykowym. Nie otrzymuję wartości od .getCurrentSeriesAndPoint(). – ChristianR

+0

Zobacz moją zaktualizowaną odpowiedź. –

+2

Jaka jest odpowiedź z obejściem, proszę? –

0

Gdy chcesz dotykać i długie kliknięcie, trzeba ustawić:

mRenderer.setOnClickable(false) 
Powiązane problemy