2013-05-31 230 views
0

我做了一個簡單的圖表,並添加像這樣的onTouchListener被失相:onTouch事件似乎

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

    if (event.getAction() == MotionEvent.ACTION_DOWN) { 
     if (mGraphPopup.isShowing()) { 
      //close popup window 
     } else { 
      SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint(); 
      if (seriesSelection != null) { 
       // open popupwindow 
      } 
     } 
    return false; 
} 

而且我預計執行這樣的:

1)點按圖表點 - 顯示彈出

2)再次點擊無處不在 - 關閉彈出窗口

但什麼是真正發生的事情:

1 *)上的圖表點挖掘:什麼也沒發生 - 因爲seriesSelection是空

2 *)從任何圖表點再次點擊遠 - seriesSelection是有效的,並加載上步點的數據點擊1 *)

它看起來像一個觸摸事件的圖表晚了。

我甚至試圖調用getCurrentSeriesAndPoint()兩次:D但沒有結果。

回答

1

我最近遇到這個問題,我找到了一個解決方案來解決它。也許你已經解決了這個問題,我也會回答它來幫助其他未來遇到問題的人。下面是解決方案:

 paintBarView.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      paintBarView.onTouchEvent(event); 

這是重要的代碼`paintBarView.onTouchEvent(event);這段代碼是確保認爲得到你的輸入,你也可以解決這個問題是這樣的:

try { 
           Field fieldX = paintBarView.getClass().getDeclaredField("oldX"); 
           Field fieldY = paintBarView.getClass().getDeclaredField("oldY"); 
           fieldX.setAccessible(true); 
           fieldY.setAccessible(true); 
           fieldX.set(paintBarView, event.getX()); 
           fieldY.set(paintBarView, event.getY()); 
          } catch (NoSuchFieldException e) { 
           e.printStackTrace(); 
          } catch (IllegalAccessException e) { 
           e.printStackTrace(); 
          } catch (SecurityException e) { 
           e.printStackTrace(); 
          } catch (IllegalArgumentException e) { 
           e.printStackTrace(); 
          } 
          SeriesSelection ss = paintBarView.getCurrentSeriesAndPoint(); 

這兩解決方案來解決這個問題,希望能幫助別人

0

爲了傾聽您的圖表上的事件並檢索點擊信息,我建議您在chartView上做一個setOnClickListener。一個很好的例子是this

+0

丹,setOnClickListener我已經做了但以這種方式,我找不到事件的真正座標。 –