2012-07-02 47 views
1

我正在使用achartengine,並且我想在動作欄中激活動作模式,當我在圖表上長按一下。但OnLongClickListener不工作,我到處搜索,幾乎所有東西都嘗試過,但是我無法正常工作,我不知道爲什麼。這裏是我的代碼:OnLongClickListener不能與achartengine一起使用

mChartView.setLongClickable(true); 
mChartView.setOnLongClickListener(new OnLongClickListener() { 

     @Override 
     public boolean onLongClick(View v) { 
      Log.i("ClickListener", "CLICK"); 
      return false; 
     } 

}); 

但事件從未被調用,我認爲這是因爲圖表是可滾動的,但沒有意義。我試過惠普OnClick,也不起作用。唯一能夠工作的是OnTouch,但我無法得到Long-Press的行爲。

編輯:

或者,也許是得到了觸摸屏狀態下的實際狀況,在這條路上,我可以把一個「計時器」,直到它達到例如1000毫秒,但只有當觸摸屏是任何方式感動,因爲在onTouch事件中,當事件發生時,我只能知道觸摸屏的狀態,而不管當前狀態是什麼。

好吧,這裏一些折線圖碼:

private static XYSeries input1; 
private static XYMultipleSeriesDataset mDataset; 
private static XYSeriesRenderer renderer1; 
private static XYMultipleSeriesRenderer mRenderer; 
private static GraphicalView mChartView; 

mRenderer = new XYMultipleSeriesRenderer(); 
     renderer1 = new XYSeriesRenderer(); 

     mRenderer.setOrientation(Orientation.HORIZONTAL); 
     mRenderer.addSeriesRenderer(renderer1); 
     mRenderer.setXAxisMax(10); 
     mRenderer.setYAxisMax(10); 
     mRenderer.setAxesColor(Color.WHITE); 
     mRenderer.setLabelsColor(Color.WHITE); 
     mRenderer.setShowGrid(true); 

     input1 = new XYSeries("Linea"); 

     mDataset = new XYMultipleSeriesDataset(); 
     mDataset.addSeries(input1); 

     renderer1.setColor(Color.WHITE); 

     input1.add(4, 7); 
     input1.add(7, 3); 
     input1.add(8, 6); 
     input1.add(9, 2); 

     mChartView = ChartFactory.getLineChartView(this, mDataset, mRenderer); 
     setContentView(mChartView); 

     mChartView.setLongClickable(true); 
     mChartView.setOnLongClickListener(new OnLongClickListener() { 

      @Override 
      public boolean onLongClick(View v) { 
       Log.i("Click", "LONG CLICKED CHART"); 
       return false; 
      } 

     }); 

我試圖做長按,因爲我意識到,如果我滑將抽放的圖形長按還與onTouch ,所以我不得不採取長按,但如果我不滑動圖表。

+0

你也有一個onTouchListener設置在同一個視圖?如果是的話,你可以發佈代碼嗎? – FoamyGuy

+0

不,我只有OnLongClickListener。 – Andres

回答

2

您可以使用runnable與onTouchListener()一起獲得與onLongClick()相同的效果。像這樣的東西應該這樣做:

boolean fingerStillDown = false; 
final Runnable longClickRun = new Runnable(){ 
    public void run(){ 
     if(fingerStillDown){ 
      Log.i("CHARTS!", "LONGCLICK!"); 
     } 
    } 
}; 
mChartView.setOnTouchListener(new OnTouchListener() { 
    public boolean onTouch(View v, MotionEvent me){ 
     if(me.getAction() == MotionEvent.ACTION_DOWN){ 
       fingerStillDown = true; 
       //The system registers longclick at ~500ms. 
       mChartView.postDelayed(longClickRun, 500); 
     } 

     if(me.getAction() == MotionEvent.ACTION_UP){ 
      fingerStillDown = false; 
     } 


     return false; //<-- I didn't test with true, but I suspect returning true 
         // would break the scrolling. 
     } 
    }); 
+0

它可以在可以滾動的折線圖上工作嗎? – Andres

+0

我創建了一個簡單的折線圖的新活動,並且不起作用:/ – Andres

+0

嗯,你能發表一些可以創建折線圖的工作代碼嗎?我不喜歡aChartEngine,我現在無法獲得折線圖。我認爲你最好的選擇是使用一個touchListener和一個計時器,就像你在編輯中說過的那樣。如果您發佈了一些工作折線圖代碼,我可以幫助您正確實施touchListener。 – FoamyGuy

0

嘗試返回true而不是false。這種方式元素被長時間按下,所以這個日子已經被處理了。

mChartView.setOnLongClickListener(new OnLongClickListener() { 

     @Override 
     public boolean onLongClick(View v) { 
      Log.i("ClickListener", "CLICK"); 
      return true; 
     } 

}); 
+0

我認爲如果這是他的問題,他仍然會看到日誌聲明。 – FoamyGuy

+0

是的,它不起作用:/ – Andres

+0

看看[this](http://stackoverflow.com/a/7725994/828728),我認爲這可能會有所幫助。您可以查看官方示例[此處](http://code.google.com/p/achartengine/source/browse/trunk/achartengine/demo/org/achartengine/chartdemo/demo/chart/XYChartBuilder.java?r= 367)。 – yugidroid

相關問題