2012-03-19 66 views
3

我是新來的android和我使用aChartEngine創建一個條形圖。我想在用戶點擊圖表時捕獲x和y值。我已經看過來自aChartEngine的演示並讓我的圖表創建正常。但是,當我點擊graphy時,onClickListner不起作用。我已經在OnResume方法中定義了偵聽器,但它不起作用。任何想法將不勝感激。我在這裏錯過了什麼嗎?aChartEngine,GraphicalView OnClickListener不工作

,這裏是我的onResume方法是從XYChartBuilder

@Override 
protected void onResume() { 
    super.onResume(); 
Toast.makeText(Clickable2.this, "In OnResume", Toast.LENGTH_SHORT).show(); 

    if (mChartView == null) {  

Toast.makeText(Clickable2.this, "mChartView is null", Toast.LENGTH_SHORT).show();  

    LinearLayout layout = (LinearLayout) findViewById(R.id.chart); 
    mChartView = ChartFactory.getBarChartView(this,mDatasetMethod(titles,x,values),renderer,Type.DEFAULT); 
    renderer.setClickEnabled(true); 
    renderer.setSelectableBuffer(100); 

    //OnClickListener 
    mChartView.setOnClickListener(new View.OnClickListener() { 
    // @Override 
     public void onClick(View v) { 
Toast.makeText(Clickable2.this, "ON CLICK", Toast.LENGTH_SHORT).show();    
     SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint(); 
     double[] xy = mChartView.toRealPoint(0); 
     if (seriesSelection == null) { 
      Toast.makeText(Clickable2.this, "No chart element was clicked", Toast.LENGTH_SHORT) 
       .show(); 
     } else { 
      Toast.makeText(
        Clickable2.this, 
       "Chart element in series index " + seriesSelection.getSeriesIndex() 
        + " data point index " + seriesSelection.getPointIndex() + " was clicked" 
        + " closest point value X=" + seriesSelection.getXValue() + ", Y=" + seriesSelection.getValue() 
        + " clicked point value X=" + (float) xy[0] + ", Y=" + (float) xy[1], Toast.LENGTH_SHORT).show(); 
     } 
     } 
    }); 

    //LongClickListener 
    mChartView.setOnLongClickListener(new View.OnLongClickListener() { 
    // @Override 
     public boolean onLongClick(View v) { 
     SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint(); 
    Toast.makeText(Clickable2.this, "ON LONG CLICK", Toast.LENGTH_SHORT).show(); 
     if (seriesSelection == null) { 
      Toast.makeText(Clickable2.this, "No chart element was long pressed", 
       Toast.LENGTH_SHORT); 
      return false; // no chart element was long pressed, so let something 
      // else handle the event 
     } else { 
      Toast.makeText(Clickable2.this, "Chart element in series index " 
       + seriesSelection.getSeriesIndex() + " data point index " 
       + seriesSelection.getPointIndex() + " was long pressed", Toast.LENGTH_SHORT); 
      return true; // the element was long pressed - the event has been 
      // handled 
     } 
     } 
    }); 

    mChartView.addZoomListener(new ZoomListener() { 
     public void zoomApplied(ZoomEvent e) { 
     String type = "out"; 
     if (e.isZoomIn()) { 
      type = "in"; 
     } 
     System.out.println("Zoom " + type + " rate " + e.getZoomRate()); 
     } 

     public void zoomReset() { 
     System.out.println("Reset"); 
     } 
    }, true, true); 

    mChartView.addPanListener(new PanListener() { 
     public void panApplied() { 
     System.out.println("New X range=[" + renderer.getXAxisMin() + ", " + renderer.getXAxisMax() 
      + "], Y range=[" + renderer.getYAxisMax() + ", " + renderer.getYAxisMax() + "]"); 
     } 
    }); 

    layout.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)); 
    boolean enabled = mDataset.getSeriesCount() > 0; 
    } else { 
    mChartView.repaint(); 
Toast.makeText(Clickable2.this, "mChartView is NOT null", Toast.LENGTH_SHORT).show(); 
    } 
} 
+0

你有沒有得到這個工作?你可以發佈工作代碼嗎? – jcaruso 2013-12-18 19:51:24

回答

5

您可以檢查代碼,像XYMultipleSeriesRenderer對象的一些定義取? 也許你忘了將setClickEnabled方法設置爲true?!

或者,也許你應該嘗試:

setOnTouchListener 

與方法:

public boolean onTouch(View v, MotionEvent event) 

這對我的作品。

+0

你可以發佈工作代碼嗎? – jcaruso 2013-12-18 19:52:18

+0

Render.setclickable(true);爲我工作 – 2014-07-31 08:14:30

+0

謝謝!它從來沒有想過我需要在渲染器上設置它,因爲它甚至不是視圖。 – 2014-10-20 14:22:29

0

將參數setSelectableBuffer方法的值更改爲更大的數字。